#node.js #mongodb #mongoose #aggregation #aggregator
#node.js #mongodb #mongoose #агрегация #агрегатор
Вопрос:
Я создал коллекцию ссылок, которая содержит другое имя коллекции и идентификатор документа.
Итак, это выглядит так
{
refName: "Collection 1",
refId: "123123",
},
{
refName: "Collection 2",
refId: "456734",
}
Коллекция 1 и коллекция 2 содержат документы с идентификаторами 123123 и 456734.
В этом случае я хочу зациклить всю коллекцию ссылок и получить ссылочные данные коллекции с помощью агрегации mongodb.
Я пытался использовать $lookup, но сказано, что $from of $lookup должны быть строковыми литералами, а не переменными.
Есть ли способ обрабатывать транзакции такого рода в MongoDB?
Ответ №1:
Вы можете преобразовать string в int или int в string
db.ref.aggregate([
{
$addFields: {
refId: {
"$toInt": "$refId"
}
}
},
{
"$lookup": {
"from": "coll1",
"localField": "refId",
"foreignField": "_id",
"as": "join"
}
}
])
Рабочая строка Mongo playground в Int
Рабочая игровая площадка Mongo Int в строку с некоррелированными подзапросами
Комментарии:
1. спасибо за вашу помощь. ваш образец выглядел великолепно. Но я хотел чего-то другого.
2. итак, теперь вы используете from со статическим строковым литералом точно coll1 . Но то, что я хочу получить, устанавливается с помощью coll1 или coll2, данные из поля db.
3. Итак, вам нужен другой поиск для подключения coll2, как я показал вам выше