代码之家  ›  专栏  ›  技术社区  ›  yozawiratama

MongoDB聚合查找返回集合中的每个项

  •  0
  • yozawiratama  · 技术社区  · 7 年前

    我想使用MongoDB和Aggregate查找两个集合,这是我的查询:

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

    问题是我使用userid来聚合它。 users 收集和 buddies 集合是 1到1 .

    我希望它能增加 user_buddy 属性与buddies.userid和users.u id匹配,但我得到的不同:

    /* 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
            }
        ]
    } 
    

    如你所见,好友的用户名是 5B2DECA18966A4054121266型 ,但在 用户好友 返回两个文档,其中一个文档不同 _id

    我希望它能匹配 buddies.userId users._id .

    如何解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alex Blex    7 年前

    localField foreignField 是字段名。

    应该是

    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")
        ....