Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Mongodb 如何根据同一集合中特定文档的值计算所有文档中的字段?_Mongodb_Collections_Pymongo_Aggregation Framework_Mongodb Aggregation - Fatal编程技术网

Mongodb 如何根据同一集合中特定文档的值计算所有文档中的字段?

Mongodb 如何根据同一集合中特定文档的值计算所有文档中的字段?,mongodb,collections,pymongo,aggregation-framework,mongodb-aggregation,Mongodb,Collections,Pymongo,Aggregation Framework,Mongodb Aggregation,我是MongoDb的新手,尝试在其中实现一些基本的计算。我有以下的集合,calc { "_id" : 1, "value" : 10} { "_id" : 2, "value" : 20} { "_id" : 3, "value" : 20} { "_id" : 4, "value" : 30} { "_id" : 5, "value" : 30} { "_id" : 6, "value" : 30} 我想将“_id”:1的值添加到该集合中文档的所有值字段中,并使用计算结果创建一个新字段。因此

我是MongoDb的新手,尝试在其中实现一些基本的计算。我有以下的集合,calc

{ "_id" : 1, "value" : 10}
{ "_id" : 2, "value" : 20}
{ "_id" : 3, "value" : 20}
{ "_id" : 4, "value" : 30}
{ "_id" : 5, "value" : 30}
{ "_id" : 6, "value" : 30}
我想将“_id”:1的值添加到该集合中文档的所有值字段中,并使用计算结果创建一个新字段。因此,我期待的最终结果如下

{ "_id" : 1, "value" : 10, "sumup":20 }
{ "_id" : 2, "value" : 20, "sumup":30 }
{ "_id" : 3, "value" : 20, "sumup":30 }
{ "_id" : 4, "value" : 30, "sumup":40 }
{ "_id" : 5, "value" : 30, "sumup":40 }
{ "_id" : 6, "value" : 30, "sumup":40 }

您可以在mongo shell中尝试以下操作:

db.collection.aggregate([
    { 
        "$project": { 
            "value": 1, 
            "sumup": { 
                "$add": [ "$value", (db.collection.findOne({"_id": 1})).value ] 
            } 
        } 
    }
])

您可以在mongo shell中尝试以下操作:

db.collection.aggregate([
    { 
        "$project": { 
            "value": 1, 
            "sumup": { 
                "$add": [ "$value", (db.collection.findOne({"_id": 1})).value ] 
            } 
        } 
    }
])