当前位置:  开发笔记 > 编程语言 > 正文

在MongoDB中对聚合中的嵌套字段使用$ multiply

如何解决《在MongoDB中对聚合中的嵌套字段使用$multiply》经验,为你挑选了1个好方法。



1> styvane..:

使用.aggregate()方法.

从版本3.2开始,您可以使用阶段中的$sum累加器运算符$project来计算并返回数组的总和quantity * price.当然要获得阵列,您需要使用$map运算符.该$ifNull运算符计算"量"和"价"的值,然后返回0,如果他们评价为空值.管道中的最后一个阶段是$group您按"数字"对文档进行分组并为每个组返回"总计"的阶段.

db.collection.aggregate([
    { "$project": { 
        "number": 1,  
        "total": { 
            "$sum": { 
                "$map": { 
                    "input": "$rows", 
                    "as": "row", 
                    "in": { "$multiply": [ 
                        { "$ifNull": [ "$$row.quantity", 0 ] }, 
                        { "$ifNull": [ "$$row.price", 0 ] } 
                    ]} 
                }
            }
        }
    }},
    { "$group": { 
        "_id": "$number", 
        "total": { "$sum": "$total" } 
    }}
])

如果您不是3.2版,则需要$project使用$unwind运算符在阶段之前对"rows"数组进行非规范化.

db.collection.aggregate([
    { "$unwind": "$rows" }, 
    { "$project": { 
        "number": 1,  
        "value": { "$multiply": [
            { "$ifNull": [ "$rows.quantity", 0 ] }, 
            { "$ifNull": [ "$rows.price", 0 ] } 
        ]}
    }}, 
    { "$group": { 
        "_id": "$number", 
        "total": { "$sum": "$value" } 
    }}
])

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有