MongoDB: Возможно ли объединить 2 запроса в один?

#mongodb #mongodb-query #aggregation-framework

#mongodb #mongodb-запрос #агрегация-фреймворк

Вопрос:

2 коллекции, которые у меня есть:

Users :

 {
_id: "user_unique_id_123",
email: "user@google.com" 
}
  

И Products :

 {
_id: "unique_product_id",
name: "product name",
user: "user_unique_id_123"
}
  

В качестве входного параметра я получаю email address и мне нужно извлечь все, Products связанные с этим email address .

Проблема в том, что предпочтительный способ просто делает только one запрос к MongoDB, а не 2 отдельных запроса: для извлечения user Id с помощью email и после извлечения Products с помощью user-id .

Итак, не могли бы вы подсказать, возможно ли вообще иметь только один вызов вместо 2?

Комментарии:

1. Вы пробовали использовать $lookup ?

Ответ №1:

Вы можете сделать, как показано ниже

Воспроизвести

 db.Users.aggregate([
  {
    "$lookup": {
      "from": "Products",
      "localField": "_id",
      "foreignField": "user",
      "as": "userProducts"
    }
  }
])
  
 {"$lookup":
{
 "from": "collection to join",
 "localField": "field from the input documents",
 "foreignField": "field from the documents of the from collection",
 "as": "output array field"
 }