我在 mongodb 集合中的檔案:
{
'id' : 'ID1',
'status' : 'ST1',
'logs' : [
{
'id' : 'ID2',
'status_old' : 'ST2',
'status_new' : 'ST3',
},
{
'id' : 'ID3',
'status_old' : 'ST3',
'status_new' : 'ST4',
}
]
},
{
'id' : 'ID4',
'status' : 'ST4',
'logs' : [
{
'id' : 'ID5',
'status_old' : 'ST2',
'status_new' : 'ST3',
}
]
}
我想通過以下兩個過濾器傳遞檔案
filter1 :
where
( status = 'ST1' OR
status_old = 'ST1' OR
status_new = 'ST1' )
那么得到的答案應該放在下面的過濾器(條件)中:
filter2 :
where
( status = 'ST2' OR
status_old = 'ST2' OR
status_new = 'ST2' )
答案有兩個條件,根據上面提供的檔案,情況如下:
{
'id' : 'ID1',
'status' : 'ST1',
'logs' : [
{
'id' : 'ID2',
'status_old' : 'ST2',
'status_new' : 'ST3',
},
{
'id' : 'ID3',
'status_old' : 'ST3',
'status_new' : 'ST4',
}
]
},
uj5u.com熱心網友回復:
因為您沒有從logs陣列中過濾掉任何元素,所以這看起來像一個包含 2 個$match階段$or的聚合
db.collection.aggregate([
{
$match: {
$or: [
{
"status": "ST1"
},
{
"logs.status_old": "ST1"
},
{
"logs.status_new": "ST1"
}
]
}
},
{
$match: {
$or: [
{
"status": "ST2"
},
{
"logs.status_old": "ST2"
},
{
"logs.status_new": "ST2"
}
]
}
}
])
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/433614.html
