对多个键进行排序的MongoDB查询

时间:2017-06-15 15:16:02

标签: mongodb sorting mongodb-query

我已经安装并运行了MongoDB,并且我发出的查询如下所示:

db.indexCollection.aggregate([
  {$match:
    {'term': {$regex: 'gas'},
     'term': {$regex: 'carbon'},
     'term': {$regex: 'hydro'}}
  },
  {$sort:
      {'documentFrequency': 1,
       'postingsList._id.termFrequency': 1}
    },
  {$group:
     {_id: {_id: '$postingsList._id.documentID'}}
  }
],
{allowDiskUse: true});

返回的documentID应包含匹配表达式中指定的所有三个单词(或子词)(逻辑AND),按文档频率按升序排序(优先级为小文档频率)和术语频率按降序排列(优先考虑最能充分利用这些术语的文件,因此具有最高的术语频率)。

但是,我注意到当我更改与' postingsList._id.termFrequency'相关联的值时从1到-1,没有任何变化......这让我觉得我在排序方面做错了。如果我更改与' documentFrequency'相关联的值,则输出的顺序(只是一个documentID列表)会发生变化。 有任何想法吗?

编辑:

我在密钥'上执行简单查找查询时的示例输出格式,

{
    “_id” : ObjectId(“5941b6ad3de5cb1799f8ea26"),
    “term” : “gases”,
    “documentFrequency” : 2,
    “postingsList” : [
        {
            “documentID” : 8317982,
            “termFrequency” : 4
        },
        {
            “documentID” : 9587169,
            “termFrequency” : 1
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

$ group阶段之后的输出并不像你希望的那样,因为$group stage's output may not reflect the order of the input data;具体而言,文件说:

  

$group does not order its output documents.

如果您希望在执行$ group后订购输出,则需要在$ group之后添加$ sort。