MongoDB Atlas 搜索:按“searchScore”排序

问题描述

我运行以下聚合管道并且运行良好:

[
  {
    $search: {
      text: {
        query: text,path: 'name',fuzzy: {
          maxEdits: 2,prefixLength: 0,maxExpansions: 256,},{
    $limit: 10,{
    $project: {
      _id: 1,name: 1,score: { $Meta: 'searchscore' },]

我可以看到分数字段出现在我的结果中并且是正确的。现在我想对 $Meta 属性 searchscore 检索到的文档进行排序。但是,在管道的末尾添加此步骤:

{
  $sort: { score: { $Meta: 'searchscore' },_id: 1 },}

产生以下错误

MongoError: $Meta sort by 'searchscore' Metadata is not supported

我如何实现这一目标?

解决方法

您需要在排序之前添加一个包含 $meta 结果的新字段(您已经这样做了),然后对该字段进行排序,因此您的新管道将是:

...

{
    $project: {
      _id: 1,name: 1,score: { $meta: 'searchScore' },// you are already adding the field here.
     },},{
   $sort: {
      score: -1,// use the new computed field here.
      _id: 1
   }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...