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
MongoDb按$size对数组中的数组元素进行计数_Mongodb_Nosql_Nosql Aggregation - Fatal编程技术网

MongoDb按$size对数组中的数组元素进行计数

MongoDb按$size对数组中的数组元素进行计数,mongodb,nosql,nosql-aggregation,Mongodb,Nosql,Nosql Aggregation,当一个数组在另一个数组中时,我需要帮助来计算它的元素 我的命令是,当我尝试选择第二个数组时 db.artysci.aggregate([ { $project: { _id:0, nazwa: 1, nazwisko: 1, numberOfSongs: { "album": {$size: "$utwor"}} }

当一个数组在另一个数组中时,我需要帮助来计算它的元素

我的命令是,当我尝试选择第二个数组时

db.artysci.aggregate([
   {
      $project: {
          _id:0,
         nazwa: 1,
         nazwisko: 1,
         numberOfSongs: { "album": {$size: "$utwor"}}
              
      }
   }
] )
网格:

按$size计数时的输出:“$album”


如何按$size计算数组中数组的元素数?

您可以使用Map实现这一点,然后将其相加。它起作用了

db.artysci.aggregate({
    "$project": {
        _id: 0,
        nazwa: 1,
        nazwisko: 1,
        "numberOfAlbums": { "$size": { $ifNull: ["$album", []] } },
        "numberOfSongs": {
            "$sum": {
                "$map": {
                    "input": "$album",
                    "in": { "$size": { $ifNull: ["$$this.utwor", []] } }
                }
            }
        }
    }
})

您可以使用
$unwind
$group
获取计数

db.collection.aggregate([
  {
    $unwind: "$album"
  },
  {
    $unwind: "$album.utwor"
  },
  {
    $group: {
      _id: 0,
      total: {
        $sum: 1
      }
    }
  }
])

如果您需要更多信息,请将其添加到您的问题中。

@Kacper

这是你第二个问题的答案

是的,您可以通过上述方法或使用“展开并进行平均”来实现

让我们看一个使用“展开”的示例:

无除法/秒:

 db.notifications.aggregate([
       { $unwind: "$album" },
       { $unwind: "$album.utwor" },
       {
          $group: {
             _id: "$_id",
             avgDuration: { $avg: "$album.utwor.dlugosc_trwania" }
          }
       },
    ]);
db.notifications.aggregate([
   { $unwind: "$album" },
   { $unwind: "$album.utwor" },
   {
      $group: {
         _id: "$_id",
         avgDuration: { $avg: { $divide: ["$album.utwor.dlugosc_trwania", 60] } }
      }
   },
]);
带除法/秒:

 db.notifications.aggregate([
       { $unwind: "$album" },
       { $unwind: "$album.utwor" },
       {
          $group: {
             _id: "$_id",
             avgDuration: { $avg: "$album.utwor.dlugosc_trwania" }
          }
       },
    ]);
db.notifications.aggregate([
   { $unwind: "$album" },
   { $unwind: "$album.utwor" },
   {
      $group: {
         _id: "$_id",
         avgDuration: { $avg: { $divide: ["$album.utwor.dlugosc_trwania", 60] } }
      }
   },
]);

费苏尔·哈桑,你能再帮我一件事吗?我需要做avg/60(秒)的所有歌曲。这样做好吗?“avgOfSongTime”:{“$avg”:{“$map”:{“input”:“$album”,“$map”:{“input”:“$utwor”,“in”:{“$avg”:{$ifNull:[“$$this.dlugosc_trwania”,[]}}