在MongoDB中,为什么aggregate()查询和find()查询返回不同的结果?
它们都返回一组不同的20个结果,但有一些结果是相同的。
聚集体
db.items.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [
-79.3927217,
43.648358
],
},
distanceField: "distance",
minDistance: 0,
maxDistance: 100000,
spherical: true,
},
},
{
$match: {
date: {
$gt: 1529825292207,
$lt: 1659425292207,
}
},
},
{
$project: {
id: 1,
distance: 1,
_id: 0
}
},
{
$sort: {date: -1
}
},
{
$limit: 20
}
])
找到
db.items.find({
"loc": {
"$nearSphere": {
"$geometry": {
"type": "Point",
"coordinates": [
-79.3927217,
43.648358
]
},
"$minDistance": 0,
"$maxDistance": 100000
}
},
"date": {
$gt: 1529825292207,
$lt: 1659425292207,
},
},
{
id: 1,
_id: 0,
distance: 1
}
).sort({date: -1
}).limit(20)
1条答案
按热度按时间olmpazwi1#
在聚合管道中,您是在投影出要排序的查找结果之后进行排序的,因此在
$sort
stage处理时,没有文档具有date
字段,因此stage不会更改流中文档的顺序。如果您对管道重新排序,将$sort阶段放在$project阶段之前,它应该返回与find相同的结果。