Python 更新子文档的快速方法
我的JSON文档(称为“i”)有子文档(称为“元素”)。 我正在循环处理这些子文档,并一次更新一个。但是,要做到这一点(一旦计算出所需的值),我需要mongo扫描数据库中的所有文档,然后扫描所有子文档,然后找到它需要更新的子文档 我有重大的时间问题,因为我有约3000份文件,这大约需要4分钟。 我想知道是否有一种更快的方法可以做到这一点,mongo不必扫描所有文档,而是在循环中进行扫描 代码如下:Python 更新子文档的快速方法,python,mongodb,Python,Mongodb,我的JSON文档(称为“i”)有子文档(称为“元素”)。 我正在循环处理这些子文档,并一次更新一个。但是,要做到这一点(一旦计算出所需的值),我需要mongo扫描数据库中的所有文档,然后扫描所有子文档,然后找到它需要更新的子文档 我有重大的时间问题,因为我有约3000份文件,这大约需要4分钟。 我想知道是否有一种更快的方法可以做到这一点,mongo不必扫描所有文档,而是在循环中进行扫描 代码如下: for i in db.stuff.find(): for element in i['
for i in db.stuff.find():
for element in i['counts']:
computed_value = element[a] + element[b]
db.stuff.update({'id':i['id'], 'counts.timestamp':element['timestamp']},
{'$set': {'counts.$.total':computed_value}})
我通过“id”标识整个文档,然后通过其时间戳(每个子文档都是唯一的)标识子文档。我需要找到比这更快的方法。谢谢您的帮助。您的收藏有哪些索引?通过在嵌入文档上创建索引,这可能会加快速度。您可以使用点符号来实现这一点——这里有一个很好的解释和示例 在你的情况下,你会这样做
db.stuff.ensureIndex( { "i.elements.timestamp" : 1 });
这将使您在嵌入式文档中的搜索运行得更快
他在哪里搜索嵌入的文档?是否需要更新每个文档N次(针对每个元素)?为什么不用python更新整个文档,然后对整个结构执行单个db.stuff.update?