$ lookup в Mongodb возвращает пустой массив - PullRequest
0 голосов
/ 06 мая 2018

Я работаю над проектом базы данных mongodb. У меня есть две коллекции: «пользователь» и «комментарии». Я хочу объединить некоторую информацию из "пользователя" в "комментарии", используя $ lookup.

Вот моя коллекция "user":

db.user.insert(
[
    { user_id: 1, fname: "D", lname: "Lei", email: "d@m.edu" },
    { user_id: 2, fname: "R", lname: "Wick", email: "rn@m.edu" },
    { user_id: 3, fname: "B", lname: "Elfs", email: "bs@m.edu" },
    { user_id: 4, fname: "A", lname: "Losh", email: "a@me.edu" },
    { user_id: 5, fname: "T", lname: "Ph", email: "p_thi@m.edu" }

]
)

Вот коллекция "комментариев":

db.comments.insert(
[
{blog_ID: 37, user_ID: 4, texts: 'comment ...', date_posted: '2016-1-1'},
{blog_ID: 3, user_ID: 4, texts: 'comment ...', date_posted: '2009-7-4'},
{blog_ID: 15, user_ID: 3, texts: 'comment ...', date_posted: '2017-6-4'},
{blog_ID: 4, user_ID: 4, texts: 'comment ...', date_posted: '2012-3-11'},
{blog_ID: 38, user_ID: 5, texts: 'comment ...', date_posted: '2005-11-6'},
{blog_ID: 2, user_ID: 1, texts: 'comment ...', date_posted: '2011-10-11'},
{blog_ID: 46, user_ID: 4, texts: 'comment ...', date_posted: '2014-12-13'},
{blog_ID: 31, user_ID: 2, texts: 'comment ...', date_posted: '2012-11-26'},
{blog_ID: 26, user_ID: 3, texts: 'comment ...', date_posted: '2006-10-28'},
{blog_ID: 47, user_ID: 3, texts: 'comment ...', date_posted: '2018-1-15' }
]
)

Вот мой запрос:

   db.comments.aggregate([

    {$match: {user_ID:4}},        
    {$group: {_id:"$user_ID", count:{$sum:1}}},
    {$lookup:{
                from: "user",
                localField: "user_ID",
                foreignField: "user_id",
                as: "combine"
            }
     }


])

Массив объединений пуст:

enter image description here

1 Ответ

0 голосов
/ 06 мая 2018

Вторая стадия вашего конвейера ($group stage) заменяет исходное поле user_ID полем _id. Таким образом, вы должны использовать _id в качестве localField на вашем $lookup этапе:

db.comments.aggregate([
    {$match: {user_ID:4}},        
    {$group: {_id:"$user_ID", count:{$sum:1}}},
    {$lookup:{
                from: "user",
                localField: "_id",
                foreignField: "user_id",
                as: "combine"
            }
     }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...