Как найти пересечение двух коллекций в monogdb? - PullRequest
0 голосов
/ 11 марта 2019

Допустим, у меня есть 2 коллекции

первая: -

db.product_main

{
  _id:123121,
  source_id:"B4456dde1",
  title:"test Sample",
  price: 250
  quantity: 40
}

, которые состоят из ~ 10000 объектов (массив) и уникальное поле имеет значение source_id.

Второе: -

дБ.product_id

{
  "_id":58745633,
  "product_id":"B4456dde1"
}

, которые состоят из ~ 500 и имеют только поле "product_id", равное "source_id" db.product_main

сейчас, я хочу пересечьдве коллекции, так что я нахожу только те, которые не существуют в db.product_id.

db.product_main.aggregate ({любой запрос})

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Просто используйте этап поиска, чтобы найти продукты, связанные с коллекцией 'product_main', а затем сопоставьте пустой массив (т. Е. Записи, в которых не найден product_id)

db.product_main.aggregate([
  {
    $lookup: {
      from: "product_id",
      localField: "source_id",
      foreignField: "product_id",
      as: "products_available"
    }
  },
  {
    $match: {
      products_available: {
        $size: 0
      }
    }
  }
])
0 голосов
/ 11 марта 2019

Вкл. WRITE операции с использованием агрегатного конвейера. Вы также можете напрямую выгружать обновление статистики с помощью команды $out и сохранять кэшированный результат в product_stats коллекции (например).

Позже в операциях web / ui / api READ просто используйте эту кэшированную коллекцию. Конечно, вы можете создавать методы запросов к базе данных для кэшированных и не кэшированных результатов.

...