我正在執行查找查詢,但想排除查找表中布爾欄位值為 false 的記錄,這可能嗎?這是我當前的查詢:
const pipeline = [
{
'$lookup': {
'from': 'photos',
'localField': '_id',
'foreignField': 'postId',
'as': 'photoData'
}
}, {
'$project': {
'createdAt': 1,
...
'photoData': {
'$cond': {
'if': {
'$eq': [
false, '$photoData.published'
]
},
'then': '$$REMOVE',
'else': '$photoData'
}
}
}
}
]
這是照片集
{
id:'1234',
url:'some.url.com',
published:true
},
{
id:'4567',
url:'some.otherurl.com',
published:false
},
我想從照片集合 (photoData) 查找中排除“已發布”設定為 false 的任何記錄。我認為使用“專案”將是正確的方法,但我不確定,而且我似乎找不到正確的語法/邏輯
uj5u.com熱心網友回復:
$lookup 回傳一個陣列,因此 '$photoData.published' 也將是一個陣列,因此永遠不會匹配 false。
您可以使用$filter從陣列中洗掉未發布的影像,例如:
{$filter: {
input: "$photoData",
as: "photo",
cond: {$ne:["$$photo.published",false]}
}}
``
uj5u.com熱心網友回復:
您可以使用$lookupwith 管道來執行帶有子查詢的集合之間的連接:
- 將
posts(id) 與photo(postId) 連接起來。 published: true只匹配。
db.posts.aggregate([
{
"$lookup": {
"from": "photos",
let: {
postId: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$postId",
"$$postId"
]
},
{
$eq: [
true,
"$published"
]
}
]
}
}
},
],
"as": "photoData"
}
},
{
"$project": {
"createdAt": 1,
"photoData": 1
}
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/369058.html
