PyMongo: Вопрос по множественному обновлению данных
Всем привет.
У меня есть такие данные:
{'data': [{'_id': ObjectId('60e422a7c37c8d5c7f92add9'), 'processing_duration': 378.8, 'from_cache': False, 'predict_result': 'Spam', 'probability': '0.5316912313644865', 'message_hash': '8ee640883e8bce3ebed1dba8a0c6c7e5', 'date': '2021-07-06 09:30:12.193452'}, {'_id': ObjectId('60e422b1c37c8d5c7f92addb'), 'processing_duration': 49.75, 'from_cache': False, 'predict_result': 'Spam', 'probability': '0.7002104', 'message_hash': 'b0384a99d40dfe6375d615689e02dfb2', 'date': '2021-07-06 09:30:24.465770'}, {'_id': ObjectId('60e422b1c37c8d5c7f92addc'), 'processing_duration': 35.61, 'from_cache': False, 'predict_result': 'Spam', 'probability': '0.6056733', 'message_hash': '6d7b2640368d0b98dc81a3cde41b7ed9', 'date': '2021-07-06 09:30:17.535144'}, {'_id': ObjectId('60e422c5c37c8d5c7f92addf'), 'processing_duration': 17.57, 'from_cache': False, 'predict_result': 'Spam', 'probability': '0.8142542043496809', 'message_hash': '910be0727279462f6cca4d5b43093387', 'date': '2021-07-06 09:30:42.515050'}, {'_id': ObjectId('60e423b5c37c8d5c7f92adf8'), 'processing_duration': 1.08, 'from_cache': True, 'predict_result': 'Spam', 'probability': '0.8142542043496809', 'message_hash': '910be0727279462f6cca4d5b43093387', 'date': '2021-07-06 09:34:38.985356'}, {'_id': ObjectId('60e42f6ec37c8d5c7f92af25'), 'processing_duration': 14.71, 'from_cache': False, 'predict_result': 'Spam', 'probability': '0.7841739770961472', 'message_hash': 'ad2f8a932272db08debaff29cb8feb69', 'date': '2021-07-06 10:24:40.329178'}, {'_id': ObjectId('60e42f78c37c8d5c7f92af27'), 'processing_duration': 5.93, 'from_cache': False, 'predict_result': 'Spam', 'probability': '0.7841739770961472', 'message_hash': 'd8d6cbc88b02d4dc4adb465d76843c00', 'date': '2021-07-06 10:24:48.530278'}, {'_id': ObjectId('60e42f82c37c8d5c7f92af29'), 'processing_duration': 9.18, 'from_cache': False, 'predict_result': 'Ham', 'probability': '0.5042150298482148', 'message_hash': 'd35586e8dddff88c41c9ed8e36179a49', 'date': '2021-07-06 10:25:03.079936'}, {'_id': ObjectId('60e42fb4c37c8d5c7f92af2f'), 'processing_duration': 8.23, 'from_cache': False, 'predict_result': 'Ham', 'probability': '0.5042150298482148', 'message_hash': 'c61e1179249679a7789144cf8d3b5afe', 'date': '2021-07-06 10:25:46.875858'}]}
После определенных преобразований я хочу сделать множественное обновление данных с помощью collection.update_many(), но мне нужно обновить данные исходя из '_id'. То есть я должен обновить только те данные, которые совпадают по id то что, в базе, и то, что передаю.
Ответы (1 шт):
Автор решения: Viktor Andriichuk
→ Ссылка
def update_many(self, data: list, fields: list):
for i in range(len(data)):
# Find _id raw in MongoDB
udpate_in = {
'_id': {
"$in": [ObjectId(data[i].get('_id'))]
}
}
# Set fields updates for this raw (for all fields we need from list)
new_values = {
"$set": {
field: data[i].get(field) for field in fields
}
}
# Query update
self.collection.update_one(udpate_in, new_values)
Решил так, поскольку у Монго я не нашел возможности делать множественные изменения с различными значениями ключей для разных строк фильтра.