Mongodb 聚合获取每个用户的数据

Mongodb Aggregation get Data per user

报告table样本数据

    {
    "_id" : ObjectId("614415f4a6566a001623b622"),
    "record" : [ 
        {
            "dateTime" : ISODate("2021-09-17T04:13:39.465Z"),
            "status" : "time-in",
            "month" : 9,
            "day" : 17,
            "year" : 2021,
            "time" : 1631852019465.0,
            "date" : ISODate("2021-09-17T00:00:00.000Z"),
        },
        {
            "dateTime" : ISODate("2021-09-17T04:14:01.182Z"),
            "status" : "time-out",
            "month" : 9,
            "day" : 17,
            "year" : 2021,
            "time" : 1631852041182.0,
            "date" : ISODate("2021-09-17T00:00:00.000Z"),
        }
    ],
    "uid" : ObjectId("614415b0a6566a001623b80b"),
    "date" : ISODate("2021-09-17T00:00:00.000Z"),
    "status" : "time-out",
    "createdAt" : ISODate("2021-09-17T04:13:40.102Z"),
    "updatedAt" : ISODate("2021-09-17T04:14:01.831Z"),
    "__v" : 0
}

用户table样本数据

{
"_id" : ObjectId("615c0f6db30aff375cd05ac1"),
"displayName" : "test test",
"firstName" : "test",
"lastName" : "test",
"email" : "test@gmail.com",
"brand" : "Jollibee",
"phone" : "+632312312312312",
"role" : 1,
"isVerified" : true,
"isArchived" : false,
"createdAt" : ISODate("2021-10-05T08:40:13.208Z"),
"updatedAt" : ISODate("2021-10-05T08:40:13.208Z"),
"__v" : 0

}

我有这样的数据

db.getCollection('users').aggregate([
    { 
        "$match": { brand: "Jollibee" } 
    },
    {
          $lookup: {
              from: "orders",
              let: { id: 'id' },
              pipeline: [
                {
                    $match: {
                        date: { $gte: ISODate("2020-11-01"), $lt: ISODate("2021-11-31") },
                    }
                }
              ],
              as: "orders",
          },

    },
    {
      $project: {
        "_id": 1,
        "name": 1,
        "orders": 1
      }

    }
  ])

当我使用这个聚合时,我得到了每个用户插入的所有数据。

我想要发生的是。我只会获取属于该用户的数据,不会获取所有用户的所有数据。

为每个集合添加了示例文档

您没有比较两个集合的用户 ID。您应该将其添加到您的 $match 中。 Playground

db.users.aggregate([
  {
    "$match": {
      brand: "Jollibee"
    }
  },
  {
    $lookup: {
      from: "orders",
      let: {
        id: "$_id"
      },
      pipeline: [
        {
          $match: {
            date: {
              $gte: ISODate("2020-11-01"),
              $lt: ISODate("2021-11-30")
            },
            $expr: {
              $eq: [
                "$uid",
                "$$id"
              ]
            }
          }
        }
      ],
      as: "orders",
      
    },
    
  },
  {
    $project: {
      "_id": 1,
      "name": 1,
      "orders": 1
    }
  }
])