[英]MongoDB $cond with embedded document array
我正在嘗試生成一個帶有字段“desc”的新集合,同時考慮到文檔數組中字段的條件。 為此,我使用$cond語句
源集合示例是下一個:
{
"_id" : ObjectId("5e8ef9a23e4f255bb41b9b40"),
"Brand" : {
"models" : [
{
"name" : "AA"
},
{
"name" : "BB"
}
]
}
}
{
"_id" : ObjectId("5e8ef9a83e4f255bb41b9b41"),
"Brand" : {
"models" : [
{
"name" : "AG"
},
{
"name" : "AA"
}
]
}
}
查詢是下一個:
db.runCommand({
aggregate: 'cars',
'pipeline': [
{
'$project': {
'desc': {
'$cond': {
if: {
$in: ['$Brand.models.name',['BB','TC','TS']]
},
then: 'Good',
else: 'Bad'
}
}
}
},
{
'$project': {
'desc': 1
}
},
{
$out: 'cars_stg'
}
],
'allowDiskUse': true,
})
問題是$cond語句總是返回“else”值。 我也嘗試過使用$eq或$and使用$ne的$or語句,但總是返回“else”。
我做錯了什么,或者我應該如何解決這個問題?
謝謝
由於$Brand.models.name
返回一個數組,我們不能使用$in
運算符。
相反,我們可以使用$setIntersection返回一個數組,該數組包含出現在每個輸入數組中的元素
db.cars.aggregate([
{
"$project": {
"desc": {
"$cond": [
{
$gt: [
{
$size: {
$setIntersection: [
"$Brand.models.name",
[
"BB",
"TC",
"TS"
]
]
}
},
0
]
},
"Good",
"Bad"
]
}
}
},
{
"$project": {
"desc": 1
}
},
{
$out: 'cars_stg'
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.