私のJSONドキュメント(「i」と呼ばれる)には、サブドキュメント(「要素」と呼ばれる)があります。私はこれらのサブドキュメントをループして、一度に1つずつ更新しています。ただし、これを行うには(必要な値が計算されたら)、データベース内のすべてのドキュメントをスキャンし、次にすべてのサブドキュメントをスキャンして、更新する必要のあるサブドキュメントを見つけます。
約3000のドキュメントがあり、これには約4分かかるため、大きな時間の問題が発生しています。mongoがすべてのドキュメントをスキャンする必要はなく、ループ内でスキャンすることで、これを行うためのより迅速な方法があるかどうかを知りたいと思います。
コードは次のとおりです。
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」で識別し、次にサブドキュメントをそのタイムスタンプ(各サブドキュメントに固有)で識別しています。これよりも早い方法を見つける必要があります。ご協力ありがとうございました。