我想在 .find 方法的過濾器中提供陣列
我發現這個方法匹配輸入陣列中的字串,有沒有辦法我們可以反過來做。
db.collection.find({"phoneNumber.type": { $in: ["ACD", "BFG"] } })
uj5u.com熱心網友回復:
根據您要查找的內容的評論:db.collection.find({ ['a','b','c'] : 'c' })我認為您可以使用此聚合查詢:
- 首先創建一個輔助欄位,
$objectToArray用于獲取鍵作為k欄位和值作為v欄位。 - 然后
$match使用$in鍵。這將$match回傳鍵在陣列中的檔案(在本例中為["a", "b", "c"]),而值 (v) 是所需的檔案。也$elemMatch用于確保物件相同。 - 最后一步是
$project去除輔助場。
db.collection.aggregate([
{
"$addFields": {
"aux": {"$objectToArray": "$$ROOT"}
}
},
{
"$match": {
"aux": {
"$elemMatch": {
"k": {"$in": ["a","b","c"]},
"v": "c"
}
}
}
},
{
"$project": {
"aux": 0
}
}
])
示例在這里
uj5u.com熱心網友回復:
您可以在客戶端動態構建一系列條件:
const fieldnames = [ "field1","field2","field3" ];
const value = "match";
const criteria = fieldNames.map(function(fname){
var ret = {};
ret[fname] = value;
return ret;
});
然后,如果您想要其中任何一個匹配的檔案,請使用:
Model.find({$or: criteria})
如果您只希望檔案全部匹配,請使用:
Model.find({$and: criteria})
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/368873.html
