MongoDB聚合查找管道查询

问题描述

我正在寻找有关MongoDB查找聚合查询的帮助。

我正试图加入两个集合,即“ cafe”和“ stamp”。在查找期间,我想匹配给定咖啡馆的印章,然后进一步排序并将结果限制为10。

相关的id字段是:“ _ id”代表咖啡馆收藏,“ cafeId”代表邮票收藏。

以下是我提出的内容,但是在尝试按给定集合之间的ID进行匹配时似乎存在问题。我相信这可能与Mongo没有将它们视为ObjectID的原因有关,但是我不确定。

db.cafe.aggregate([
      {
        $lookup: {
          from: "stamp",as: "stamps",let: {
            id: "$_id",name: "$name"
          },pipeline: [
            { $project: { id:1,cafeId: { $toObjectId: "$$id"},name:1 } },{ $match: { expr: { $eq: ["$$cafeId","$cafeId"] } } },{ $sort: { stampDate: -1 } },{ $limit: 10 }
          ]
        }
      }
    ]);

解决方法

设法弄清楚如何实现我想要的目标。将此保留在此处,以供其他尝试获得相同结果的人使用。

db.cafe.aggregate([
  {
    $lookup: {
      from: "stamp",as: "stamps",let: {
        id: "$_id",name: "$name" //All cafes variables,},pipeline: [
        {
          $project: {
            cafeId: 1,stampDate: 1,stampId: 1,cafeId: 1,status: 1,userId: { $toObjectId: "$userId" }
          }
        },{
          $match: {
            $expr: {
              $and: [
                {
                  $eq: [{ $toObjectId: "$$id" },{ $toObjectId: "$cafeId" }]
                },{
                  $eq: [
                    { $toObjectId: "$userId" },mongoose.Types.ObjectId(req.user._id)
                  ]
                }
              ]
            }
          }
        }
      ]
    }
  }
]);