[英]How do I perform an 'every' query in mongoose
假設我有一個數據庫,其中的文檔字段包含以下內容
new Test({fruits: [ 'apple', 'orange', 'banana']})
我想通過另一個數組查詢水果數組,確保傳遞給查詢的數組包含水果數據庫中的每個項目。
在純 JavaScript 中,我會執行以下操作:
var target = [ 'apple', 'orange', 'banana'];
var fruit2 = [ 'apple', 'orange', 'banana', 'peach']; // true
var fruit3 = [ 'mango', 'lemon', 'pineapple']; // false
var fruit4 = [ 'banana', 'apple', 'orange']; // true
const result = target.every(targetElem => fruit2.includes(targetElem));
console.log(result);
我不能使用$in
因為它遍歷查詢數組中的每個項目,確保所有項目都存在。 就我而言,我不介意查詢的數組是否包含額外的項目,只要它與數據庫中的數組具有相同的項目即可。
如果您使用的是 MongodB 3.6+ 版,則可以將$expr
與$map
、 $allElementsTrue
和$in
以針對您的查詢數組評估每個文檔中數組的每個成員。
db.collection.find({
$expr:{
$allElementsTrue:{
$map:{
input: "$fruits",
in: {$in: ["$$this", [ 'apple', 'orange', 'banana', 'peach']]}
}
}
}
})
這可能不是很有效。
編輯:
這樣做的另一種方法可以使用索引,至少部分:
db.collection.find({fruits:{$all:[ 'apple', 'orange', 'banana', 'peach']}})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.