[英]Filter subdocuments with array field is not empty
現在我有一個聚合管道返回以下數組:
[{
"_id": 1,
"items": {
"_id": 1,
"transactions": []
}
},
{
"_id": 2,
"items": {
"_id": 2,
"transactions": [
{
"_id": "5a536dc1bc9b2113986a9047",
"price": 5.56
},
{
"_id": "5a536e1bbc9b2113986a904e",
"price": 11.56,
}
]
}
},
{
"_id": 3,
"items": {
"_id": 1,
"transactions": []
}
}]
可以過濾子文檔“ items”中字段“ transactions”不為空的文檔。 像這樣:
[{
"_id": 2,
"items": {
"_id": 2,
"transactions": [
{
"_id": "5a536dc1bc9b2113986a9047",
"price": 5.56
},
{
"_id": "5a536e1bbc9b2113986a904e",
"price": 11.56,
}
]
}
}]
用於聚合管道而不用於查詢
在匯總管道中,最后添加$match
管道以根據事務數組大小進行過濾
> db.foo.aggregate([{$match : {"items.transactions" : { $gt : {$size : 0}}}}]).pretty()
輸出
{
"_id" : 2,
"items" : {
"_id" : 2,
"transactions" : [
{
"_id" : "5a536dc1bc9b2113986a9047",
"price" : 5.56
},
{
"_id" : "5a536e1bbc9b2113986a904e",
"price" : 11.56
}
]
}
}
>
樣本文件
> db.foo.find().pretty()
{ "_id" : 1, "items" : { "_id" : 1, "transactions" : [ ] } }
{
"_id" : 2,
"items" : {
"_id" : 2,
"transactions" : [
{
"_id" : "5a536dc1bc9b2113986a9047",
"price" : 5.56
},
{
"_id" : "5a536e1bbc9b2113986a904e",
"price" : 11.56
}
]
}
}
{ "_id" : 3, "items" : { "_id" : 1, "transactions" : [ ] } }
>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.