我有一個聚合管道,我只想在存在預期引數的情況下執行匹配。例如;
params = { fruit: 'apple', other_params.. }
在我的聚合管道中:
Some.collection.aggregate([ { "$match": { fruit: params[:friut] } } ...other stages ])
所以我只想在我fruit有params. 可以嗎?
請注意,這params不是一個集合,而是一些外部請求引數。
uj5u.com熱心網友回復:
Mongodb 查詢是 javascript 物件,因此您可以根據您獲得的引數使用代碼輕松動態地構建它們。
如果您希望所有引數都成為比賽的一部分,您可以執行類似的操作。
Some.collection.aggregate([ { "$match": params } ...other stages ])
//params is variable that ou already have
//params = { fruit: 'apple', other_params.. }
如果你想讓一些引數成為比賽的一部分,你可以做類似的事情
var matchQuery={};
if(params has "fruit") matchQuery["fruit"]=params["fruit"];
//.....you can do this for all the parameters.....
Some.collection.aggregate([ { "$match": matchQuery } ...other stages ])
替代方法不是從{}您開始,而是從引數中洗掉不應該成為 matchQuery 一部分的對。
uj5u.com熱心網友回復:
您可以在匹配階段通過簡單的 $or 邏輯來實作這一點:
db.collection.aggregate([
{
$match: {
$or: [
{
fruit: {
$exists: true,
$eq: "apple"
}
},
{
fruit: {
$exists: false
}
}
]
}
}
])
解釋:
- 如果存在關鍵水果,它將檢查是否等于“蘋果”
- 如果密鑰不存在,它不會做任何事情
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/424101.html
