У меня есть 2 разных документа, к которым я хочу присоединиться на основе определенного атрибута.
В первом документе я хочу использовать $ group для группировки документов на основе атрибута, а затем использовать результат для соединения со вторым документом.
Мой первый документ spotmodel
имеет такую структуру:
{
"_id" : ObjectId("5c17724498ea721018ba9d59"),
"code" : "AD01",
"streetId" : ObjectId("5c16d3e6e6cbea23a0393b4b")
},
{
"_id" : ObjectId("5c17724498ea721018ba9d60"),
"code" : "AD02",
"streetId" : ObjectId("5c16d3e6e6cbea23a0393b4b")
}
// other documents with same or different streetID
Мой второй документ areamodel
имеет следующую структуру:
{
"_id" : ObjectId("5c16d339e6cbea23a0393b47"),
"description" : "Area A",
"streets" : [
{
"_id" : ObjectId("5c16d3e6e6cbea23a0393b4b"),
"name" : "Waterloo"
},
{
"_id" : ObjectId("5c16d536e6cbea23a0393b51"),
"name" : "Bristol"
}
]
}
,
{
"_id" : ObjectId("5c16d339e6cbea23a0393b47"),
"description" : "Area B",
"streets" : [
{
"_id" : ObjectId("5c16d3e6e6cbea23a0393b2a"),
"name" : "Park Av."
},
{
"_id" : ObjectId("5c16d536e6cbea23a0393b2b"),
"name" : "Nelson St."
}
]
}
Я хочу сгруппировать документ spotmodel
на основе streetId
и использовать этот сгруппированный запрос для присоединения к документу areamodel
в любое время streetId
совпадения streets._id
Пока у меня есть следующий запрос:
db.spotmodel.aggregate([
{
$group: {
_id: "$streetId",
codes: {
$push: {
code: "$code",
}
}
}
},
{$lookup: {
from: "db.areamodel",
localField: "streets._id",
foreignField: "_id",
as: "details"
}},
{$match:{details:{$ne:[]}}}
])
но этот код дает мне пустой массив []
, но результат, который я ожидаю, выглядит примерно так:
{
"_id" : ObjectId("5c16d339e6cbea23a0393b47"),
"description" : "Area A",
"streets" : [
{
"_id" : ObjectId("5c16d3e6e6cbea23a0393b4b"),
"name" : "Waterloo",
"codes":[
{
"code": "AD01"
},
{
"code": "AD02"
}
]
},
{
"_id" : ObjectId("5c16d536e6cbea23a0393b51"),
"name" : "Bristol"
}
]
}
Где моя ошибка?