Использовать значения полей в функции $ lookup в MongoDB - PullRequest
0 голосов
/ 11 февраля 2020

Прямо сейчас я столкнулся с проблемой, когда я хочу объединить коллекции в Mon go на основе переменной, поскольку данные хранятся в другой коллекции.

Мой набор данных будет выглядеть как

{
    _id:5e424331134cea013014ea9e0,
    process:"Process1",
    event:"Event1",
    collection:"Collection1",
    Date:"2020-02-11",
},
{
    _id:5e424135151cea32114ea9e0,
    process:"Process2",
    event:"Event2",
    collection:"Collection2",
    Date:"2020-02-11",
}

Коллекция, из которой мне нужны данные, сохраняется в значении поля $collection.

Коллекции выглядят так:

Коллекция1:

{
    _id:5e63636636cea32114ea9e0,
    item:81740147,
    value:2,
    Date:"2020-02-11",
}

Сборник 2:

{
    _id:5e63636636cea32114ea9e0,
    user:testuser,
    age:3,
    Date:"2020-02-11",
}

Чего я хочу достичь в агрегированном пипилине, так это присоединиться к моим документам на основе имени коллекции.

Что я уже пробовал:

{
    $lookup: {
        from: '$collection',
        localField: 'Date',
        foreignField: 'Date',
        as: 'join'
    }
}

Это не сработало для меня. Возможно, у вас другая идея.

Пожалуйста, имейте в виду, что я могу использовать только структуру агрегации для решения проблемы, а не cli mongodb.

1 Ответ

0 голосов
/ 11 февраля 2020

Измените его на что-то вроде этого

{
    $lookup: {
        from: 'collectionname', // the name you specified when creating your model
        localField: 'Date',
        foreignField: 'Date',
        as: 'join'
    }
}

Оно должно совпадать с тем, с чем вы создали свою модель, иначе оно не будет работать

Если имя вашей коллекции динамическое c,

Вместо этого вы всегда можете использовать переменную,

, как будто вы можете сделать что-то вроде этого

var coll_name = 'collectionname';

{
    $lookup: {
        from: coll_name,
        localField: 'Date',
        foreignField: 'Date',
        as: 'join'
    }
}

Теперь вы можете передать эту коллекцию динамических c имя из любой точки вашей функции / api

...