Я использую MongoDB, и у меня есть эта модель данных для моей коллекции 'book':
{
"_id" : ObjectId("5b32566e2796789e15f18cbe"),
"service" : ObjectId("5b32550fe66a2c2d781a021e"),
"state" : "paid",
"observations" : "",
"datetime_paid" : "",
"price" : 50,
"responsible" : {
"name" : "Mark",
"surname" : "Beckam",
"birthdate" : "",
"email" : "mark@example.com",
"phone" : ""
},
"updates" : [],
"tickets" : [
{
"passenger" : {
"name" : "Mark",
"surname" : "Beckam",
"birthdate" : "",
"email" : "mark@beckam.com",
"phone" : "666 666 666"
},
"qr_id" : "pwenci3y32m",
"roundtrip" : "ida_vuelta",
"price" : 50,
}
]
}
Теперь я пытаюсь запросить все билеты и ответственных за каждую книгу, которая совпадает с идентификатором сервиса. Мой подход состоит в следующем:
db.getCollection('books').aggregate([
{ $match: { service: ObjectId("5b32550fe66a2c2d781a021e") } },
{
$group: {
_id: 0,
tickets: { $push: "$tickets" }
}
},
{
$project: {
tickets: {
$reduce: {
input: "$tickets",
initialValue: [],
in: { $setUnion: ["$$value", "$$this"] }
}
}
}
}
]);
С этим запросом я возвращаю полный список билетов через разные книги, но мне также нужны ответственные данные (которые есть в каждой книге) в каждом билете:
{
"_id" : 0.0,
"tickets" : [
{
"passenger" : {
"name" : "Mark",
"surname" : "Beckam",
"birthdate" : "",
"email" : "mark@beckam.com",
"phone" : "666 666 666"
},
"qr_id" : "",
"roundtrip" : "ida_vuelta",
"price" : 50,
// I need here the responsible field associated to the book that
contains that ticket
}
]
}
Заранее спасибо