Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongo数组查询计数_Javascript_Mongodb - Fatal编程技术网

Javascript Mongo数组查询计数

Javascript Mongo数组查询计数,javascript,mongodb,Javascript,Mongodb,样本采集 [ { products: [ {name: 'apple'}, {name: 'mango'}, {name: 'orange'} ] }, { products: [ {name: 'banna'}, {name: 'grapes'}, {name: 'orange'} ] } ] 我想通过查询知道哪个文档至少包含2个我搜索的产品 例如 collection.find({ products: {$in: ['apple', 'mango', 'du

样本采集

[
 {
  products: [
   {name: 'apple'}, {name: 'mango'}, {name: 'orange'}
  ]
},
 {
  products: [
   {name: 'banna'}, {name: 'grapes'}, {name: 'orange'}
  ]
}
]
我想通过查询知道哪个文档至少包含2个我搜索的产品

例如

collection.find({ products: {$in: ['apple', 'mango', 'durian', 'avocado', 'orange']} })
但这只检查它是否包含这些产品中的一种。
我想知道某个文档是否包含至少2个产品im搜索

您可以添加一些代码以便操作查询结构,或者必须使用聚合管道

选项1(推荐),将聚合管道与以下内容一起使用:

选项2(imo建议较少),从fruits数组生成所有可能的对,并使用:

让水果=[‘苹果’、‘芒果’、‘榴莲’、‘鳄梨’、‘橙子’];
设queryconds=[];
for(设i=0;i
您可以添加一些代码来操作查询结构,也可以使用聚合管道

选项1(推荐),将聚合管道与以下内容一起使用:

选项2(imo建议较少),从fruits数组生成所有可能的对,并使用:

让水果=[‘苹果’、‘芒果’、‘榴莲’、‘鳄梨’、‘橙子’];
设queryconds=[];
for(设i=0;i
let fruits = ['apple', 'mango', 'durian', 'avocado', 'orange'];
collection.aggregate([
    {
        $match: {
            "products.name": {$in: fruits}
        }
    },
    {
        $project: {
            good_products_size: {
                $size: {
                    $filter: {
                        input: "$products",
                        as: "product",
                        cond: {$in: ["$$product.name", fruits]}
                    }
                }
            }
        }
    },
    {
        $match: {
            good_products_size: {$gt: 1}
        }
    }
]);
let fruits = ['apple', 'mango', 'durian', 'avocado', 'orange'];
let queryOrConds = [];

for (let i = 0; i < fruits.length - 1; i++) {
    for (let j = i; j < fruits.length - 1; j++) {
        queryOrConds.push({"products.name": {$all: [fruits[i], fruits[j]]}})
    }
}
collection.find({ $or: queryOrConds })