如何在猫鼬中执行“每个”查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在猫鼬中执行“每个”查询相关的知识,希望对你有一定的参考价值。

说我有一个数据库,其中包含以下内容的文档字段

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']]
            
         
    
)

这可能不是很有效。

Playground

以上是关于如何在猫鼬中执行“每个”查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用各种参数在猫鼬中进行搜索查询?

如何在猫鼬中使用聚合

在猫鼬中更新它们时如何访问每个文档字段[重复]

如何在猫鼬中找到随机记录[重复]

在猫鼬中,如何根据相关集合中的值查找记录?

在猫鼬中,我如何按日期排序? (node.js)