mongodb - совокупный поиск без локального - PullRequest
0 голосов
/ 01 февраля 2019

Итак, у меня есть два ObjectId в разных коллекциях, которые я хотел бы объединить в качестве выходных данных.Так что это похоже на использование функции $lookup без каких-либо локальных полей.Без агрегата я мог бы просто сделать два .findOne, но для этого потребовалось бы два вызова API (что привело бы к созданию двух соединений).Можно ли добиться этого за один раз?

Так что без агрегирования это выглядело бы примерно так:

let main_document =
    db.findOne({
        _id: ObjectId(first)
    })

let subdocument =
    db.findOne({
        _id: ObjectId(second)
    })

main_document.subdocument = subdocument

return main_document

1 Ответ

0 голосов
/ 01 февраля 2019

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

Вам не нужно указывать localField в более новом синтаксисе $lookup.Просто используйте $match внутри вспомогательного конвейера $lookup агрегация

db.main_document.aggregate([
  { "$match": { "_id": ObjectId(first) }},
  { "$lookup": {
    "from": "subdocument",
    "pipeline": [
      { "$match": { "_id": ObjectId(second) }},
    ],
    "as": "subdocument"
  }},
  { "$unwind": "$subdocument" }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...