簡體   English   中英

篩選具有數組字段的子文檔不為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM