Как выполнить электронную таблицу, как вертикальный поиск в MongoDB? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть collection1 с collection1Column и другим столбцом presentInCollection2,

--------------------------------------------
| collection1Column | presentInCollection2 |
--------------------------------------------
| A                 | null                 |
| B                 | null                 |
| C                 | null                 |
--------------------------------------------

У меня есть collection2 с collection2Compare

----------------------
| collection2Compare |
---------------------- 
| A                  | 
| B                  | 
----------------------

Теперь я нужно обновить collection1 столбец presentInCollection2 только в том случае, если в collection2 collection2Compare найдено *1015* точное совпадение *.

Одно из возможных решений javascript, которое я подумал, - это следующее:

  • Получить все значения из обеих коллекций в 2 переменных.

  • Как только значения станут доступны, возьмите одно за другим значения от collection1 collection1Column и итерации collection2Compare из collection2, чтобы найти совпадение.

  • Как только совпадение будет найдено, обновится presentInCollection2

Мне это кажется очень дорогим с точки зрения памяти и производительности.

Однако я ищу реализацию только для базы данных для сопоставления и обновления и т. Д. c.

Пожалуйста, предложите!

Простыми словами, как это сделать V Lookup in MongoDB?

1 Ответ

1 голос
/ 19 марта 2020

Необходимо выполнить агрегирование MongoDb с оператором $ lookup . Он оставил внешнее соединение и вернул Array. На следующем шаге нам нужно использовать $arrayElemAt, чтобы получить одно значение.

Collection1Model.aggregate([
  {
    $lookup: {
      from: "collection2",
      localField: "collection1Column",
      foreignField: "collection2Compare",
      as: "presentInCollection2"
    }
  },
  {
    $addFields: {
      presentInCollection2: {
        $arrayElemAt: [
          {
            $concatArrays: [
              "$presentInCollection2.collection2Compare",
              [
                null
              ]
            ]
          },
          0
        ]
      }
    }
  }
  //,{"$out" : "collection1"}
]).exec();

MongoPlayground

Примечание: Если мы добавьте в качестве последнего шага {$out:"collection1"}, MongoDB переопределит все записи с результатом агрегации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...