我已经安装并运行了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
}
]
}
答案 0 :(得分:0)
$ group阶段之后的输出并不像你希望的那样,因为$group stage's output may not reflect the order of the input data;具体而言,文件说:
如果您希望在执行$ group后订购输出,则需要在$ group之后添加$ sort。