Команда MongoDB updateMany

#python #mongodb #pymongo

Вопрос:

Я пытался обновить свои таблицы MongoDB с помощью _id с помощью updateMany. Я не смог найти способ или команду в документальном фильме MongoDB, который я хочу обновить. Я использую python для управления данными.

Вот мои записи:

 Tbl = {
    "_id": {
        "$oid": "001"
    },
    "name": "Alisha",
    "age": 24,
    "userid": 378824346,
    "salary": 30000
},
{
    "_id": {
        "$oid": "002"
    },
    "name": "Lana",
    "age": 22,
    "userid": 378824347,
    "salary": 20000
},
{
    "_id": {
        "$oid": "003"
    },
    "name": "Ivan",
    "age": 26,
    "userid": 378824348,
    "salary": 40000
},
{
    "_id": {
        "$oid": "004"
    },
    "name": "Yuri",
    "age": 25,
    "userid": 378824349,
    "salary": 34000
}
 

Я хочу обновить сразу три записи с помощью updateMany(). Моя попытка выглядит следующим образом:

 
Tbl.updateMany({
    '_id': {
        '$in': ["001", 
                "002", 
                "003"]
    }
}, {
    '$set': [{'age': 25, 'salary': 35000}, 
             {'age': 23, 'salary': 25000}, 
             {'age': 27, 'salary': 45000}]
})
 

Я хотел бы знать, могу ли я обновить многие записи в MongoDB подобным образом. Заранее благодарю вас за потраченное время.

Комментарии:

1. это массовое обновление, это невозможно с помощью одного updateMany() запроса, вы можете использовать bulkWrite() .

Ответ №1:

UpdateMany не будет работать для нескольких заданных запросов. Для этого потребуется только один набор запросов для нескольких документов. Либо используйте цикл с одним запросом updateOne, либо, если вы хотите сделать это в одном запросе, используйте bulkWrite https://docs.mongodb.com/manual/reference/method/db.collection.bulkWrite/

 Tbl.bulkWrite([
    { 
      updateOne : {
     "filter" : { "_id" : ""001"" },
     "update" : { $set : {'age': 25, 'salary': 35000} 
     } } },
    { 
      updateOne : {
     "filter" : { "_id" : ""002"" },
     "update" : { $set : {'age': 23, 'salary': 25000} 
    } } },
])
 

Комментарии:

1. Какой была бы команда, если бы я выполнил ее в python3? Спасибо.

2. pymongo.readthedocs.io/en/stable/api/pymongo/bulk.html Это может помочь

Ответ №2:

Следующая правильная команда

 Tbl.bulkWrite([pymongo.UpdateOne(
         { "name" : "Alisha" }, { "$set" : {'age': 25, 'salary': 35000}}), 
               pymongo.UpdateOne(
         { "name" : "Ivan" }, { "$set" : {'age': 23, 'salary': 25000}})])