Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
Mongodb 如何计数匹配的数组元素_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb 如何计数匹配的数组元素

Mongodb 如何计数匹配的数组元素,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个集合,集合中的每个文档都有一个数组字段countries。我想选择包含以下任何国家/地区的所有文档: 中国、美国、澳大利亚 并且输出应该显示每个文档包含的上述国家的数量。 我使用以下聚合命令: db.movies.aggregate([ { $match: { countries: { $in: ["USA", 'China', 'Australia'] } } }, { $project: { countries: {$size: '$count

我有一个集合,集合中的每个文档都有一个数组字段
countries
。我想选择包含以下任何国家/地区的所有文档:

中国、美国、澳大利亚

并且输出应该显示每个文档包含的上述国家的数量。 我使用以下聚合命令:

db.movies.aggregate([
  {
    $match: { countries: { $in: ["USA", 'China', 'Australia'] } }
  },
  {
    $project: {
      countries: {$size: '$countries'}
    }
  }
]);
它没有按预期工作。它显示文档中拥有上述国家/地区的所有国家/地区的数量。例如,如果文档的
国家/地区字段中有
中国、日本
,我希望它返回1(因为上面的国家/地区列表中只有
中国
),但它返回2。如何在aggregation命令中执行此操作?

操作符只“查询”包含一个可能值的文档,因此它不会从数组中删除任何内容

如果要计算“仅匹配项”,请在执行以下操作之前应用于数组:

将“唯一”匹配项的“集”返回给针对文档中的数组提供的数组

在现代版本中,有一个替代的作为聚合操作符(至少是MongoDB 3.4)。这在“测试”一个“奇异”值和一个值数组时有点不同。在数组比较中,您将应用:

只有当数组“在文档中”包含不唯一的条目时,这才应该对您很重要。i、 e:

{ countries: [ "USA", "Japan", "USA" ] }
您需要为
“USA”
计算
2
,而不是
1
,后者将是

db.movies.aggregate([
  {
    $match: { countries: { $in: ["USA", 'China', 'Australia'] } }
  },
  {
    $project: {
      countries: {
        $size: { 
         $filter: {
           input: '$countries',
           cond: { '$in': [ '$$this', ["USA", 'China', 'Australia'] ] }
         }
       }
    }
  }
]);
{ countries: [ "USA", "Japan", "USA" ] }