簡體   English   中英

如何在貓鼬中執行“每個”查詢

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

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