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

对多个键进行排序的MongoDB查询,mongodb,sorting,mongodb-query,Mongodb,Sorting,Mongodb Query,我已经安装并运行了MongoDB,并发出了如下查询: db.indexCollection.aggregate([ {$match: {'term': {$regex: 'gas'}, 'term': {$regex: 'carbon'}, 'term': {$regex: 'hydro'}} }, {$sort: {'documentFrequency': 1, 'postingsList._id.termFrequency':

我已经安装并运行了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.\u id.termFrequency”关联的值从1更改为-1时,没有任何变化。这使我认为我在排序方面做了一些错误。如果我更改与“documentFrequency”关联的值,则输出的顺序(仅是DocumentID的列表)会发生变化。 有什么想法吗

编辑:

示例输出格式当我对键“term”执行简单的find查询时

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

$group阶段之后的输出并不像您希望的那样,因为a;具体而言,文档中说:


如果您希望在执行$group后对输出进行排序,则需要在$group后放置$sort。

您可以显示示例文档吗?请查看编辑器,该编辑器不是有效文档。
postingsList
实际上是数组吗?例如
“postingsList”:[{“\u id”:{…},{“\u id”:{…}]
还是
“\u id”
这里的字段真正命名为keys
“postingsList”:{“123”:{…},“456”:{…}
?因为这是文件有效的唯一方式。因此,您的问题仍然不清楚,因为您告诉我们您对文件的要求实际上是不可能的。感谢您指出这一点,我已经解决了这一问题。这确实应该是一个评论,而不是答案。主要是因为它根本没有解决实际提出的问题。