Есть ли какой-нибудь способ объединить две коллекции БД Mongo с именем динамической коллекции?

#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, как я показал вам выше