поиск по аггрегации mongodb возвращает каждый элемент в коллекции - PullRequest
0 голосов
/ 02 июля 2018

Я хочу посмотреть две коллекции, используя mongodb с агрегатом, это мой запрос:

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._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
        }
    ]
} 

Как вы можете видеть, ИД пользователя друзей: 5b2deca18966a405412d1266 , но в user_buddy возвращаются два документа, и один из них имеет разные _id

Хотелось бы, чтобы оно совпадало с buddies.userId и users._id.

как это решить?

1 Ответ

0 голосов
/ 02 июля 2018

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")
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...