【问题标题】:mongodb aggrecation lookup return every item in collectionmongodb聚合查找返回集合中的每个项目
【发布时间】:2018-12-10 19:18:54
【问题描述】:

我想使用带有聚合的 mongodb 查找两个集合,这是我的查询:

db.getCollection('buddies').aggregate([
{
     $lookup:
       {
         from: "users",
         localField: "ObjectId(userId)",
         foreignField: "ObjectId(_id)",
         as: "user_buddy"
       }
  }
])

问题是我使用 userId 来聚合它。 users 集合和buddies 集合是1 to 1

我希望它会添加 buddies.userId 和 users._id 匹配的 user_buddy 属性,但我得到的是不同的:

/* 1 */
{
    "_id" : ObjectId("5b3a2fca0fe843093879b5bc"),
    "isVerified" : false,
    "isActivated" : false,
    "createdAt" : ISODate("2018-07-02T13:59:05.273Z"),
    "userId" : "5b2deca18966a405412d1266",
    "phone" : "+6239109301",
    "photo" : "https://cloudinary.com",
    "idCardType" : "KTP",
    "idNumber" : "19901390193019",
    "updatedAt" : ISODate("2018-07-02T13:59:05.273Z"),
    "__v" : 0,
    "user_buddy" : [ 
        {
            "_id" : ObjectId("5b2dec013efecd0514a50561"),
            "createdAt" : ISODate("2018-06-23T06:43:11.092Z"),
            "username" : "lalaland",
            "email" : "lalaland@gmail.com",
            "fullname" : "Lala Princess",
            "nickname" : "lala",
            "password" : "$2a$08$LUs3fW/YPzkQeHvqH7QvTOr5H8RgqTGVvldFcUHFcfBGoRs.jn0hS",
            "updatedAt" : ISODate("2018-06-23T06:43:11.092Z"),
            "__v" : 0
        }, 
        {
            "_id" : ObjectId("5b2deca18966a405412d1266"),
            "createdAt" : ISODate("2018-06-23T06:45:48.578Z"),
            "username" : "yozawiratama",
            "email" : "yoza@yahoo.com",
            "fullname" : "Yoza Extra",
            "nickname" : "Yoza",
            "password" : "$2a$08$uZ/G61qtqdlSgSz.Qzt/i.ufiUBoPq7H8ViVwlJ1pA9SUZYUp34sO",
            "updatedAt" : ISODate("2018-06-23T06:45:48.578Z"),
            "__v" : 0
        }
    ]
} 

你可以看到好友的用户ID是5b2deca18966a405412d1266,但是在user_buddy返回两个文件,其中一个有不同的_id

我希望它能匹配 buddies.userIdusers._id

如何解决?

【问题讨论】:

  • 您的userId 是字符串... 将其转换为mongoose ObjectId
  • 你的意思是我插入的时候?

标签: mongodb


【解决方案1】:

localFieldforeignField 是字段名称。

应该是

db.getCollection('buddies').aggregate([
{
     $lookup:
       {
         from: "users",
         localField: "userId",
         foreignField: "_id",
         as: "user_buddy"
       }
  }
])

没有“ObjectId”

ObjectId 应该在文档本身中:

{
    "_id" : ObjectId("5b3a2fca0fe843093879b5bc"),
    "isVerified" : false,
    "isActivated" : false,
    "createdAt" : ISODate("2018-07-02T13:59:05.273Z"),
    "userId" : ObjectId("5b2deca18966a405412d1266")
    ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 2020-06-19
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多