Как выполнить операцию "Upsert" в PyMongo для вставки объекта в коллекцию, если его там нет, либо обновления поля, если объект уже существует?

Как можно реализовать метод для обновления или вставки данных в коллекцию MongoDB, используя `update_many` или `insert_many` в Python, чтобы обновить или добавить записи с новым статусом?
  • 9 мая 2024 г. 19:31
Ответы на вопрос 1
1. Чтобы выполнить операцию "Upsert" в PyMongo, вы можете использовать метод `update_one` с параметром `upsert=True`. Пример:

```python
from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
collection = db['mycollection']

query = {"_id": 1}
update = {"$set": {"name": "John"}}

collection.update_one(query, update, upsert=True)
```

В этом примере, если объект с `_id` равным 1 найден в коллекции, то будет обновлено поле `name` на "John". Если такого объекта нет, то он будет добавлен в коллекцию.

2. Для реализации метода обновления или вставки данных в коллекцию MongoDB, используя `update_many` или `insert_many`, вы можете сначала попытаться обновить записи с помощью `update_many`, а затем, если ни одна запись не была обновлена, добавить новые записи с использованием `insert_many`. Пример:

```python
from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
collection = db['mycollection']

update_filter = {"status": "new"}
update_query = {"$set": {"status": "updated"}}

result = collection.update_many(update_filter, update_query)

if result.modified_count == 0:
    new_data = [{"name": "Alice", "status": "new"}, {"name": "Bob", "status": "new"}]
    collection.insert_many(new_data)
```

В этом примере, сначала все записи со статусом "new" будут обновлены и изменят свой статус на "updated". Если ни одна запись не была обновлена, то будут добавлены новые записи с именем "Alice" и "Bob" и статусом "new".
Похожие вопросы