2016-03-16 5 views
0

Я хочу вставить запись в базу данных MongoDB, но только если она еще не существует. Что-то мне подсказывает, что этот код не является оптимальным с точки зрения производительности:MongoDB самый быстрый способ вставить запись, если она не существует?

if db.foo.find(record).count() == 0: 
    db.foo.insert(record) 

Как сделать это самый быстрый способ?

ответ

5

Когда обновление, используйте upsert флаг:

db.foo.update_one(filter, updates_dict, upsert=True) 

Работа Exemple:

db.things.update_one({'thing':'apple'}, {'$set':{'color':'red'}}, upsert=True) 

Это будет искать документ флиртует с 'thing': 'apple' и обновить свой цвет на красный. Если документ не найден, он будет создавать один с этими двумя параметрами.

Смотрите документы: http://api.mongodb.org/python/current/index.html

+0

Спасибо, но я получаю: Файл "foo.py", строки 35, в db.foo.update (запись, upsert = True) TypeError: обновление() принимает по крайней мере, 3-х аргументов (3) данного – Inspiring

+0

обновления устарел, я отредактирую update_one –

+0

Представим себе, что я не человек, а препроцессор. Как db.foo.insert (запись) переводится в db.foo.update_one (фильтр, запись, upsert = True)? Что такое фильтр? – Inspiring

0

Если вы просто хотите, чтобы убедиться, что только одна запись может существовать на основе определенного ключа, а затем создать уникальный индекс по этому ключу. Это обеспечит уникальность. Любая попытка вставить запись с одним и тем же ключом не удастся. Ключ может быть, например, SSN.

Смежные вопросы