Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Python 在聚合和倍增期间合并2个文档_Python_Mongodb_Aggregation Framework_Pymongo_Multiplication - Fatal编程技术网

Python 在聚合和倍增期间合并2个文档

Python 在聚合和倍增期间合并2个文档,python,mongodb,aggregation-framework,pymongo,multiplication,Python,Mongodb,Aggregation Framework,Pymongo,Multiplication,我有以下记录: { "_id" : ObjectId("5a377b895a2840568b1034d5"), "reportId" : 1234, "quantity" : 346 }, { "_id" : ObjectId("5a377b935a2840568b1034d6"), "reportId" : 1234, "users" : 96 }, { "_id" : ObjectId("5a377ba35a2840568b1034d7"), "repo

我有以下记录:

{
   "_id" : ObjectId("5a377b895a2840568b1034d5"),
   "reportId" : 1234,
   "quantity" : 346
},
{
  "_id" : ObjectId("5a377b935a2840568b1034d6"),
  "reportId" : 1234,
  "users" : 96
},
{
  "_id" : ObjectId("5a377ba35a2840568b1034d7"),
  "reportId" : 2345,
  "quantity" : 566    
},
{
  "_id" : ObjectId("5a377bac5a2840568b1034d8"),
  "reportId" : 2345,
  "users" : 66
}
我希望最终输出是这样的:

{'reportId': 1234, 'total':quantity * users}
换句话说,我希望总数是用户和数量的乘积

我尝试了以下方法:

db.test1.aggregate([ 
{'$group':
  { '_id':'$reportId', 
    'total':{'$multiply':['$users','$quantity']}
  }
}])
这会导致以下错误:

assert: command failed: {
    "ok" : 0,
    "errmsg" : "The $multiply accumulator is a unary operator",
    "code" : 40237,
    "codeName" : "Location40237"
} : aggregate failed
所以接下来我尝试了这个:

db.test1.aggregate([ {
'$group':
         { '_id':'$reportId', 
           'document':{'$push':{'reportId':'$reportId', 
                       'quantity':'$quantity','users':'$users'}}}},
{'$unwind':'$document'}])
这给了我:

{ "_id" : 2345, "document" : { "reportId" : 2345, "quantity" : 566 } }
{ "_id" : 2345, "document" : { "reportId" : 2345, "users" : 66 } }
{ "_id" : 1234, "document" : { "reportId" : 1234, "quantity" : 346 } }
{ "_id" : 1234, "document" : { "reportId" : 1234, "users" : 96 } }
我的目标是合并两个记录并应用乘法。


有没有可能在mongoDB聚合中这样做,而不是得到一个中间答案,循环遍历部分结果并完成工作?

你几乎做到了,
$group
是一个很好的方法。这样的办法应该行得通

db.test1.aggregate([
    {"$group":
        {
            "_id": "$reportId",
            "usr": {"$sum": "$users"},
            "qty": {"$sum": "$quantity"}
        }
    },
    {"$project":
         {
             "_id": 0,
             "reportId": "$_id",
             "total": {"$multiply": ["$usr", "$qty"]}
         }}
])

首先,我们将所有
用户
数量
合并,然后将它们相乘。在
分组
阶段,您需要累积所需的指标。

您几乎做到了,
$group
是一个很好的方法。这样的办法应该行得通

db.test1.aggregate([
    {"$group":
        {
            "_id": "$reportId",
            "usr": {"$sum": "$users"},
            "qty": {"$sum": "$quantity"}
        }
    },
    {"$project":
         {
             "_id": 0,
             "reportId": "$_id",
             "total": {"$multiply": ["$usr", "$qty"]}
         }}
])

首先,我们将所有
用户
数量
合并,然后将它们相乘。在
分组
阶段,您需要累积所需的指标。

您几乎做到了正确。我使用此解决方案来组合两个字段的值:

db.test1.aggregate([
    {"$group":{
        "_id":"$reportId",
        "qtd":{$sum:"$quantity"},
        "usrs":{$sum:"$users"}
    }},
    {"$project":{
        "_id":0,
        "reportId":"$_id",
        "total":
            {$multiply:["$qtd","$usrs"]}
    }}
])

希望我的回答有帮助。

你几乎答对了。我使用此解决方案来组合两个字段的值:

db.test1.aggregate([
    {"$group":{
        "_id":"$reportId",
        "qtd":{$sum:"$quantity"},
        "usrs":{$sum:"$users"}
    }},
    {"$project":{
        "_id":0,
        "reportId":"$_id",
        "total":
            {$multiply:["$qtd","$usrs"]}
    }}
])

希望我的回答有帮助。

错误消息:“errmsg”:“无法识别的表达式'$push'”,“代码”:168,“代码名”:“InvalidPipelineOperator”@israel.um,检查时间戳。是的。删除$push可以使它工作。谢谢:)嗯……没关系。我们都能解决这个问题。我会对你的答案投赞成票,因为它也是正确的。男人们对你的两个答案都投了赞成票。。。只要它解决了问题就没有问题。感谢您的时间:)错误消息:“errmsg”:“无法识别的表达式'$push'”,“code”:168,“codeName”:“InvalidPipelineOperator”@israel.zing umm,检查时间戳。是的。删除$push可以使它工作。谢谢:)嗯……没关系。我们都能解决这个问题。我会对你的答案投赞成票,因为它也是正确的。男人们对你的两个答案都投了赞成票。。。只要它解决了问题就没有问题。谢谢您的时间:)是的,早期的解决方案中有$push,导致了错误。这是有效的:)如果我的答案有帮助,请接受/更新我的答案。是的,早期的解决方案中有$push导致错误。如果我的回答有帮助,请接受/支持我的回答。