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”,[]}}