2017-01-09 3 views
0

Я пытаюсь вставить документы навалом, я создал уникальный индекс в своей коллекции и хочу пропустить дубликаты документов при выполнении массовой вставки. Это может быть достигнуто с родной mongodb функции:Как сделать объемную вставку с упорядоченным false в mongoengine

db.collection.insert(
    <document or array of documents>, 
    { 
     ordered: <boolean> 
    } 
) 

Я хочу сделать это с mongoengine, если кто-нибудь знает, как добиться этого, пожалуйста, ответить на вопрос, спасибо.

+0

https://docs.mongodb.com/manual/reference/method/Bulk.insert/ – sidgate

+0

Как это сделать в 'mongoengine'? –

ответ

1

Если у вас есть класс вроде этого:

class Foo(db.Document): 
    bar= db.StringField()  
    meta = {'indexes': [{'fields': ['bar'], 'unique': True}]} 

и имеющий список с Foo экземплярами foos=[Foo('a'), Foo('a'), Foo('a')] и пытается Foo.objects.insert(foos) вы получите mongoengine.errors.NotUniqueError

первого woraround будет удалить индекс из MongoDB, вставив дубликатов , а также обеспечить индекс с помощью {unique : true, dropDups : true}

2-й обходной путь будет использовать базовый API pymongo для навалом ops: https://docs.mongodb.com/manual/reference/method/db.collection.initializeOrderedBulkOp/#db.collection.initializeOrderedBulkOp

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