在mongodb中计算数组中的元素数和集合中每个文档的总和?

在mongodb中计算数组中的元素数和集合中每个文档的总和?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我需要计算所有订单中所有产品的数量,以及每个订单的产品数量 我收集的数据(订单事实): 我需要两个问题,第一个: 所有订单中所有产品的数量 第二个问题: 每个订单中的所有产品的数量您可以有如下内容: 第一个问题: db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $size: "$Orderline"}}}]) db.getCollecti

我需要计算所有订单中所有产品的数量,以及每个订单的产品数量

我收集的数据(订单事实):

我需要两个问题,第一个:

所有订单中所有产品的数量

第二个问题:


每个订单中的所有产品的数量

您可以有如下内容:

第一个问题:

db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $size: "$Orderline"}}}])
db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
db.getCollection('order_fact').aggregate([{$addFields: {totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
第二个问题:

db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $size: "$Orderline"}}}])
db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
db.getCollection('order_fact').aggregate([{$addFields: {totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
如果订单行确实是数组:

db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $size: "$Orderline"}}}])
db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
db.getCollection('order_fact').aggregate([{$addFields: {totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
带有条件语句的else:

db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $size: "$Orderline"}}}])
db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
db.getCollection('order_fact').aggregate([{$addFields: {totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
如果您需要将计数与原始文档一起返回:

db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $size: "$Orderline"}}}])
db.getCollection('order_fact').aggregate([{$project : {orderid:1 ,OrderLine : 1, totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])
db.getCollection('order_fact').aggregate([{$addFields: {totalNoOfProducts : { $cond: { if: { $isArray: "$Orderline" }, then: { $size: "$Orderline" }, else: "NA"} }}}])

您需要两个单独的查询,还是只需要一个就可以同时执行这两个查询?您的orderid是唯一的吗?你只想返回计数还是原始文档计数?这些对你有用吗?非常感谢,我已经测试了所有的查询,它们有效