Скрытие пустых полей при агрегировании
Есть три коллекции
party
{ "_id" : "2", "name" : "party2" }
{ "_id" : "1", "name" : "party1" }
address
{ "_id" : "a1", "street" : "Address1", "party_id" : "1" }
addressComment
{ "_id" : "ac2", "address_id" : "a1", "comment" : "Comment2" }
{ "_id" : "ac1", "address_id" : "a1", "comment" : "Comment1" }
Если сделать aggregate:
[
{ $lookup:
{
"from" : "address",
"let" : {
"partyId" : "$_id"},
"pipeline" : [
{
"$match" : {
"$expr" : {
"$and" : [
{
"$eq" : [
"$party_id",
"$$partyId"
]
}
]
}
}
}],
"as" : "address"
}
},
{
$lookup:
{
"from" : "addressComment",
"let" : {
"addressId" : "$_id"},
"pipeline" : [
{
"$match" : {
"$expr" : {
"$and" : [
{
"$eq" : [
"$address_id",
"$$addressId"
]
}
]
}
}
}],
"as" : "address.comments"
}
},
{
$unwind:
{
path: "$address",
reserveNullAndEmptyArrays: true
}
}
]
В итоге получим массив с документами
[
{
"_id" : "1",
"name" : "party1",
"address":
{ "_id": "a1",
"street": "Address1",
"party_id": "1",
"comments": [
{ "_id" : "ac2", "address_id" : "a1", "comment" : "Comment2" }
{ "_id" : "ac1", "address_id" : "a1", "comment" : "Comment1" }
]}
},
{
"_id": "2",
"name": "party2",
"address": {
comments: [] // Пустой массив
}
}
]
$unwind reserveNullAndEmptyArrays: true должен убирать поле address из результата, если оно пустое, но поскольку в party1 подтягивается пустой массив comments, то получается:
"address": {
comments: []
}
Как исключить поле address из результата в такой ситуации ?