簡體   English   中英

MongoDB-根據條件從數組返回匹配的子文檔

[英]MongoDB - Return matched sub-document from an array based on condition

想象一個如下的文檔-

我想與輸入一起返回PART的語言是“ ENG”或“ FRA”或“ GER”

文獻-

{
    "_id" : ObjectId("56a5337f19d312a4156a3625"),
    "PartId" : "Part1",
    "Name" : "Name",
    "active" : "true",
    "attribute1" : "value1",
    "attribute2" : "value2",
    "LanguageData":[ 
        {
            "Language" : "ENG",
            "description" : "PARt1- English",
            "default" : "true"
        }, 
        {
            "Language" : "FRA",
            "description" : "Part1 in french",
            "supported" : "true"
        }, 
        {
            "Language" : "GER",
            "description" : "Part1 In German",
            "supported" : "false"
        }
    ]
}

如果輸入為“ ENG”

{
    "_id" : ObjectId("56a5337f19d312a4156a3625"),
    "PartId" : "Part1",
    "Name" : "Name",
    "active" : "true",
    "attribute1" : "value1",
    "attribute2" : "value2",
    "LanguageData":[ 
        {
            "Language" : "ENG",
            "description" : "PARt1- English",
            "default" : "true"
        }
    ]
}

如果輸入為“ GER”,則輸出不應返回此文檔,因為“ supported is false”

{}

如果輸入內容為“ CHN”,則應返回默認值-

{
    "_id" : ObjectId("56a5337f19d312a4156a3625"),
    "PartId" : "Part1",
    "Name" : "Name",
    "active" : "true",
    "attribute1" : "value1",
    "attribute2" : "value2",
    "LanguageData":[ 
        {
            "Language" : "ENG",
            "description" : "PARt1- English",
            "default" : "true"
        }
    ]
}

我無法根據條件返回子文檔

根據以下條件,僅應返回數組中的子文檔

1)因此,如果存在語言,則返回該子文檔。

2)如果不存在子文檔,則始終返回默認值。

3)如果存在子文檔並且不支持,則不要返回整個文檔

要查詢子文檔,可以通過aggregate

db.document.aggregate([
    {$match: {'LanguageData.Language': 'GER'}},
    {$project: {
        LanguageData: {$filter: {
            input: '$LanguageData',
            as: 'LanguageData',
            cond: {$eq: ['$$LanguageData.Language', 'GER']}
        }}
    }}
])

為了返回默認數據, $ifNull可以做到這一點

db.document.aggregate([
    {$unwind: '$LanguageData'}, 
    {$match: {'LanguageData.Language': 'GER'}}, 
    {$project: 
       {LanguageData: 
          {Language: {$ifNull: ['$LanguageData.Language', 'CHN']}, 
           description: {$ifNull: ['$LanguageData.description', 'default description']}}}}
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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