我正在嘗試在聚合管道中匹配沒有陣列欄位中的子字串的檔案。
我相信我需要添加一個欄位然后執行$matchon -1,但我堅持$indexOfBytes要在陣列欄位中查找子字串。
db.collectionName.aggregate([{$addFields:{indexOfA:{$indexOfBytes:['$arrayName.fieldName1.fieldName2','A']}}}])
我得到錯誤:
MongoServerError: PlanExecutor error during aggregation :: caused by :: $indexOfBytes requires a string as the first argument, found: array
集合示例:
[
{ arrayName: [ fieldName1: { fieldName2: 'A' } ] },
{ arrayName: [ fieldName1: { fieldName2: 'B' } ] },
{ arrayName: [ fieldName1: { fieldName2: 'C' } ] },
{ arrayName: [ ] }
]
期望的結果(:
[
{ arrayName: [ fieldName1: { fieldName2: 'B' } ] },
{ arrayName: [ fieldName1: { fieldName2: 'C' } ] },
{ arrayName: [ ] }
]
uj5u.com熱心網友回復:
也許是這樣的:
db.collection.aggregate([
{
$addFields: {
arrayName: {
"$filter": {
"input": "$arrayName",
"as": "a",
"cond": {
$eq: [
{
$indexOfBytes: [
"$$a.fieldName1.fieldName2",
"A"
]
},
-1
]
}
}
}
}
},
{
$match: {
$expr: {
$ne: [
{
$size: "$arrayName"
},
0
]
}
}
}
])
解釋:
- $filter arrayName 元素在 fieldName2 中沒有 A
- $match 只匹配非空的 arrayName 陣列
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457724.html
