在MongoDB中,为什么aggregate()查询和find()查询返回不同的结果?

ktca8awb  于 2023-01-30  发布在  Go
关注(0)|答案(1)|浏览(284)

在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)
olmpazwi

olmpazwi1#

在聚合管道中,您是在投影出要排序的查找结果之后进行排序的,因此在$sort stage处理时,没有文档具有date字段,因此stage不会更改流中文档的顺序。
如果您对管道重新排序,将$sort阶段放在$project阶段之前,它应该返回与find相同的结果。

相关问题