Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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_Python 2.7_Pymongo - Fatal编程技术网

MongoDB$数组项的总和

MongoDB$数组项的总和,mongodb,python-2.7,pymongo,Mongodb,Python 2.7,Pymongo,我给MongoDB一个机会,用MongoDB和PYTHON构建一个简单的日志。我有一个简单的结构: db.posts.findOne() { "waketime": ISODate("2016-03-18T11:20:00Z"), "bedtime": ISODate("2016-03-18T22:00:00Z"), "day": "day entry", "dream": "dream entry", "workout" : [{"type":"cardio"},{"time":45}], "

我给MongoDB一个机会,用MongoDB和PYTHON构建一个简单的日志。我有一个简单的结构:

db.posts.findOne()
{
"waketime": ISODate("2016-03-18T11:20:00Z"),
"bedtime": ISODate("2016-03-18T22:00:00Z"),
"day": "day entry",
"dream": "dream entry",
"workout" : [{"type":"cardio"},{"time":45}],
"meditation" : [{"time":10},{"time":10}],
"sex": "none"
}
我正试图得到我花在锻炼上的时间,以及我花在每种锻炼上的时间。最后,我要说的是:

cursor = db.posts.aggregate([
    {"$group": {"_id" : "$workout.type", "count": {"$sum": "$workout.time"}}}
])
它返回以下内容:

{u'count': 0, u'_id': [u'cardio']}
{u'count': 0, u'_id': [u'strength']}
它似乎已在workout.type上正确分组,但没有$sum workout.time

有人能帮我吗


谢谢

请注意,
训练
字段是文档列表。您的错误是将此字段视为子文档。您将能够通过更改数据模型来解决问题,并保持聚合不变。因此,请尝试以下模型:

db.posts.findOne()
{
"waketime": ISODate("2016-03-18T11:20:00Z"),
"bedtime": ISODate("2016-03-18T22:00:00Z"),
"day": "day entry",
"dream": "dream entry",
"workout" : {
    "type":"cardio",
    "time":45
},
"meditation" : {
    "type":"dunno",
    "time":10
},
"sex": "none"
}
编辑:

好吧,但是如果我一天有多个锻炼呢

说得好。假设我上面的答案以一种糟糕的方式解决了这个问题,因为我增加了每天只锻炼一次的限制。让我们回到你的模型,在这个模型中不存在这种限制无论如何我都需要修改它,以便使列表中的所有项目都相等

db.posts.findOne()
{
"waketime": ISODate("2016-03-18T11:20:00Z"),
"bedtime": ISODate("2016-03-18T22:00:00Z"),
"day": "day entry",
"dream": "dream entry",
"workout" : [{"type":"cardio", "time":45},{"type": "strength", "time":45}],
"meditation" : [{"time":10},{"time":10}],
"sex": "none"
}
对于此示例,您可以将其用作聚合管道中的一个步骤:

db.posts.aggregate([{$unwind:{"$workout"}},{$group:{_id:"$workout.type", count:{$sum:"$workout.time"}}}])
我还没有测试过,但我希望它能工作


关于

好的,我现在明白了,我的数据模型有一点错误。感谢您展示如何使用$unwind ist,它现在似乎正在工作。