агрегат mongodb и $ lookup в одной коллекции внутри вложенного документа - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующая структура:

{ 
    "_id" : ObjectId("5ae451b46302b274b5ebeefb"), 
    "name" : "Laurent", 
    "email" : "laurent@laurent.fr", 
    "password" : "sha1$e6f05101$1$21444307dfa8684f479f39530b03a2f5cad98ac9", 
    "follows" : [
        {
            "_id" : ObjectId("5ae7495e1cc09532e98b70fc"), 
            "userId" : "5ae4f2dc3d921228f5af56bc"
        }, 
        {
            "_id" : ObjectId("5ae749a31cc09532e98b70fd"), 
            "userId" : "5ae5f100e11ba63941fc0cb6"
        }
    ]
}
{ 
    "_id" : ObjectId("5ae4f2dc3d921228f5af56bc"), 
    "name" : "Test", 
    "email" : "test@test.com", 
    "password" : "sha1$5155f44b$1$05ff3feef313caf6c3d9e13e44629430368ea812", 
    "follows" : [
        {
            "_id" : ObjectId("5ae591cf3f56d33772540572"), 
            "userId" : "5ae451b46302b274b5ebeefb"
        }
    ]
}
{ 
    "_id" : ObjectId("5ae5f100e11ba63941fc0cb6"), 
    "name" : "user", 
    "email" : "user@user.com", 
    "password" : "sha1$30af5299$1$7f2fe08a44221b2b03ff0365b51b0b1aa5184da1", 
    "follows" : [
        {
            "_id" : ObjectId("5ae6011a5ccd9b4bcab5f45e"), 
            "userId" : "5ae4f2dc3d921228f5af56bc"
        }, 
        {
            "_id" : ObjectId("5ae60af234591a4fdfedaf02"), 
            "userId" : "5ae451b46302b274b5ebeefb"
        }
    ], 
    "__v" : NumberInt(0)
}

Я хотел бы получить информацию о пользователях, на которую ссылаются в следующем .userId, с помощью функции агрегирования.

Мой запрос такой:

db.users.aggregate(
            {$match: {_id: ObjectId('5ae451b46302b274b5ebeefb')}},
            {$unwind: "$follows"},
            {
                $lookup: {
                    from: "users",
                    localField: "follows.userId",
                    foreignField: "_id",
                    as: "subscriptions"
                }
            }
            )

Я получаю пустое поле подписки в выводе:

{ 
    "_id" : ObjectId("5ae451b46302b274b5ebeefb"), 
    "name" : "Laurent", 
    "email" : "laurent.chriqui@coding-academy.fr", 
    "password" : "sha1$e6f05101$1$21444307dfa8684f479f39530b03a2f5cad98ac9", 
    "follows" : {
        "_id" : ObjectId("5ae7495e1cc09532e98b70fc"), 
        "userId" : "5ae4f2dc3d921228f5af56bc"
    }, 
    "subscriptions" : [

    ]
}
{ 
    "_id" : ObjectId("5ae451b46302b274b5ebeefb"), 
    "name" : "Laurent", 
    "email" : "laurent@laurent.fr", 
    "password" : "sha1$e6f05101$1$21444307dfa8684f479f39530b03a2f5cad98ac9", 
    "__v" : NumberInt(0), 
    "follows" : {
        "_id" : ObjectId("5ae749a31cc09532e98b70fd"), 
        "userId" : "5ae5f100e11ba63941fc0cb6"
    }, 
    "subscriptions" : [

    ]
}

Я не понимаю, почему поле подписки является пустым массивом и не заполнено информацией о пользователях.

Кто-нибудь имеет представление о том, в чем проблема и как я мог заставить это работать?

...