[英]mongodb javascript: return document with only matched sub-document
[英]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.