MongoDB: поиск — коллекции с одинаковыми полями

У меня две коллекции Users и Notes. Обе коллекции содержат свойство id, а коллекция Notes имеет userid, который является идентификатором некоторого пользователя в коллекции Users.

Теперь я пытаюсь объединить (объединить) некоторую пользовательскую информацию в Notes:

db.getCollection("Notes").aggregate(
{
    "$lookup": {
        "from": "Users",
        "let": {
            "idForeignField": "$id"
        },
        "pipeline": [
                            {
            "$match": {
                "$expr": {
                    "$and": [{
                        "$eq": ["$userid", "$$idForeignField"]
                    }]
                }
            }
                            }
        ],
        "as": "Users#joined"
    }
}
);

Что я получаю в пустом массиве Users#joined. Почему? Разве мой запрос не должен работать? Проблема вызвана тем, что обе коллекции имеют свойство id? Если да, как я могу сказать let и match какая коллекция правильная?

Обновлять: в качестве альтернативы отлично работает более простой запрос:

db.getCollection("Notes").aggregate(
{
   $lookup:
     {
       from: "Users",
       localField: "userid",
       foreignField: "id",
       as: "Users#joined"
     }
}
);

Однако я хотел бы сделать это с помощью let и конвейера, чтобы добавить больше условий match.

Спасибо.

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша переменная let должна быть userid

db.getCollection("Notes").aggregate([
  { "$lookup": {
    "from": "Users",
    "let": { "ifForeignField": "$userid" },
    "pipeline": [
      { "$match": { "$expr": { "$and": [{ "$eq": ["$id", "$$ifForeignField"] }] }}}
    ],
    "as": "Users#joined"
  }}
])

Другие вопросы по теме