对多个键进行排序的MongoDB查询
我已经安装并运行了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':
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”:{…}
?因为这是文件有效的唯一方式。因此,您的问题仍然不清楚,因为您告诉我们您对文件的要求实际上是不可能的。感谢您指出这一点,我已经解决了这一问题。这确实应该是一个评论,而不是答案。主要是因为它根本没有解决实际提出的问题。