如何解决MongoDB Aggregate-计算对象内所有嵌套数组元素的总数
我有一个包含以下对象的数据库结构:
"reactions": {
"?": [
"5f3c569e70441a0017511fe2","5f88d49dbf1b850017e28f4e","5f488189b0c5970017aa8c7a"
],"?": [
"5f539086cfb52a00176089ed"
]
}
我希望能够计算“反应数”(所有嵌套元素的总数)-因此,在这种情况下,预期结果将为4。
我尝试了以下操作,这成功地计算了键的数量-结果为2,而不是值的总数-应该为4。
db.collection("posts").aggregate([{
{
$addFields: {
reactionsArray: {
$objectToArray: "$reactions"
}
}
},{
$addFields: {
numberOfReactions: {
$sum: {
$size: "$reactionsArray.v"
}
}
}
}
])
解决方法
使用$reduce对数组中每个元素的大小求和。
db.collection.aggregate([
{
$addFields: {
reactionsArray: {
$objectToArray: "$reactions"
}
}
},{
"$project": {
reactionsSize: {
$reduce: {
input: "$reactionsArray",initialValue: 0,in: {
"$add": [
"$$value",{
$size: "$$this.v"
}
]
}
}
},},}
])
,
您必须先$ {unwind reactionsArray
,然后使用$ group来获取总数
db.collection.aggregate([
{
$addFields: {
reactionsArray: {
$objectToArray: "$reactions"
}
}
},{
$unwind: "$reactionsArray"
},{
$group: {
_id:"$_id",numberOfReactions: {
$sum: {
$size: "$reactionsArray.v"
}
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。