Запрос агрегации:
db.status.aggregate([
{
"$lookup": {
"from": "order",
"localField": "orderId",
"foreignField": "_id",
"as": "output"
}
},
{
"$match": {
"output.status": "PICKUP_COMPLETE"
}
},
{
"$project": {
"orderId": 1,
"orderStatus": {
"$filter": {
"input": "$orderStatus",
"as": "orderStatus",
"cond": { "$eq": ["$$orderStatus.status", "PICKUP_COMPLETE"] }
}
}
}
}
])
Запись сбора статуса:
{
"_id": ObjectId("59490963d683587d32c278ac"),
"orderId": ObjectId("5949095ed683587d32c278a9"),
"tenantId": "D-mart",
"orderStatus": [
{
"status": "ESTIMATES_RECEIVED",
"updatedAt": "June 20th 2017, 6:39:15 am"
},
{ "status": "RECEIVED_BY_LMA", "updatedAt": "June 20th 2017, 6:45:25 am" },
{ "status": "ORDER_CONFIRMED", "updatedAt": "June 20th 2017, 6:45:25 am" }
]
}
Мне нужно получить все подходящие записи из сбора заказов и сбора статусов на основе поля orderId и записи о совпаденияхкоторые имеют статус «PICKUP_COMPLETE» в массиве orderStatus (любой объект массива должен иметь этот статус).
Приведенный выше запрос работает нормально, объединяя две коллекции на основе orderId, но возвращает только первую соответствующую запись,т.е.
{
"_id": ObjectId("5a7e0a06a33f4900015c14d7"),
"orderId": ObjectId("5a7e0a06a33f4900015c14d6"),
"orderStatus": [
{
"status": "PICKUP_COMPLETE",
"updatedAt": "February 14th 2018, 11:51:09 am"
}
]
}
Я хотел бы знать, как получить полный список таких совпадающих записей ...