[英]Mongoose - Get all elements where id in nested array/Dynamically generated $and clauses
我有一個小問題。
我想檢索ID在給定數組中的集合中的所有元素。 我能做的 問題是,id必須存在於多個數組中(我事先不知道有多少個)。
所以你有了
Test.find({
$and: [
{ $in: blabla },
...
]
}
問題是我可以有多個$ in子句,調用該函數時我不知道有多少個。 有沒有辦法動態指定? (這只是一個包含id的數組的數組,如果每個數組中都存在id,則返回該元素)。
您唯一的機會就是使用$ where 。
您可能可以使用聚合框架,更具體地說是$ unwind方法來完成此操作。
假設您有一個看起來像
{
arrayOfStuff: [
[1,2,3],
[4,5,6],
[7,8,9]
]
}
那你就可以跑
db.collection.aggregate({$unwind:'$arrayOfStuff'},{$match: {arrayOfStuff: 9}})
$and
編程方式建立$and
查詢對象,以包含所需的所有數組:
var arrayOfArrays = [[...], [...], ...];
var query = { $and: [] };
for (var i=0; i<arrayOfArrays.length; ++i) {
query.$and.push({ _id: {$in: arrayOfArrays[i]} });
}
MyModel.find(query, function(err, docs) {...});
或者您可以使用map
來做得更簡潔一些:
var query = { $and: arrayOfArrays.map(function(item) { return {$in: item}; }) };
MyModel.find(query, function(err, docs) {...});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.