我有一個這樣的檔案:
const myUser = 'e'
//Collection Selection
{
level: [
{
currentUser: 'f',
stages: [
{
users: ['a','b','c']
},
{
users: ['b','d','e']
}
]
},
{
currentUser: 'g',
stages: [
{
users: ['y','x','w']
},
{
users: ['x','v','f']
}
]
}
]
}
我想選擇levelsmyUser至少在其中一個stages 或 s 中currentUser,所以我正在做這樣的查詢:
Selection.aggregate()
.addFields({myUser})
.addFields({allUsers: { // flattening all arrays into [a,b,c,b,d,e,y,x,w,x,v,f]
$reduce: {
input: {
$reduce: {
input: $level.stages.users,
initialValue: [],
in: { $concatArrays: ['$$value', '$$this'] }
},
initialValue: [],
in: { $concatArrays: ['$$value', '$$this'] }
}
}}})
match({
$or: [
{
myUser: myUser
},
{
myUser: {$in: '$allUsers'}
}
]
})
我不知道為什么我得到一個
$in 需要一個陣列
錯誤資訊。我在這里做錯了什么?
uj5u.com熱心網友回復:
用于$expr比較檔案中的欄位。
{
$expr: {
$in: [
"$myUser",
"$allUsers"
]
}
}
示例 Mongo Playground
貓鼬
.match({
$or: [
{
myUser: "e"
},
{
$expr: {
$in: [
"$myUser",
"$allUsers"
]
}
}
]
}
})
uj5u.com熱心網友回復:
我剛剛發現這樣做也有效:
.addField({myUser})
.match({
$or: [
{
myUser: "e"
},
{
"level.stages.users": myUser
}
]
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485745.html
上一篇:如何使用SpringBootReactiveWebflux在測驗中決議字串[]?
下一篇:實作素數散列的最佳方法是什么?
