mongodb - совокупный поиск без локального

1

Итак, у меня есть два 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
Теги:
mongoose
mongodb-query
aggregation-framework

1 ответ

3
Лучший ответ

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

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

db.main_document.aggregate([
  { "$match": { "_id": ObjectId(first) }},
  { "$lookup": {
    "from": "subdocument",
    "pipeline": [
      { "$match": { "_id": ObjectId(second) }},
    ],
    "as": "subdocument"
  }},
  { "$unwind": "$subdocument" }
])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню