MongoDB. Выберите поля, существующие в другой коллекции - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть две коллекции. Мне нужно выбрать документы из первого по тем критериям, что значение поля существует во второй коллекции. Например:

В коллекции User_Item есть документы, подобные приведенным ниже

{
  '_id' ...,
  'uid' : 123,
  'iid' : 'a123',
  'quantity' : 10
} 

Вторая коллекция содержит некоторые вещи, как показано ниже

{
  '_id' ...,
  'iid' : 'a456',
  'name' : 'someItem'
}

Мне нужно получить образец по идентификатору предмета ('iid'), который совпадает в обеих коллекциях. Ожидаемый результат представлен.

{
 '_id'  : ...,
 'uid' : 123,
 'iid': 'a123',
 'name' : 'item123'
 }

Я использовал $ lookup в user_items из элементов, но он возвращает КАЖДЫЕ документы в первой коллекции, и там много пустых массивов. Я хочу избежать этого.

В случае $ lookup в элементах из user_items он вернет массив пользователей. Это тоже не желаемый результат.

Есть ли какие-либо параметры в поиске или может быть другое решение этой проблемы?

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать ниже агрегации

db.User_Item.aggregate([
  { "$lookup": {
    "from": "second",
    "localField": "iid",
    "foreignField": "iid",
    "as": "second"
  }},
  { "$match": { "second": { "$ne": [] }}},
  { "$addFields": {
    "name": { "$arrayElemAt": ["$second.name", 0] }
  }},
  { "$project": { "second": 0 }}
])
...