簡體   English   中英

貓鼬-獲取嵌套數組中的id的所有元素/動態生成的$ and子句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM