Подтвердить что ты не робот

Есть ли опция "upsert" в команде mongodb insert?

Я знаю, что это может быть глупый вопрос, но я читал в электронной книге, что есть опция upsert в mongo insert. Я не мог найти надлежащую документацию об этом. Может ли кто-нибудь просветить меня об этом?

4b9b3361

Ответ 1

Так как upsert определяется как операция, которая "создает новый документ, когда документ не соответствует критериям запроса", в insert нет места для upserts. Это опция для команды update. Если вы выполняете команду, как показано ниже, она работает как update, , если есть документ, соответствующий query, или как insert с документом, описанным update в качестве аргумента.

db.collection.update(query, update, {upsert: true})

MongoDB 3.2 добавляет replaceOne:

db.collection.replaceOne(query, replacement, {upsert: true})

который имеет подобное поведение, но его replacement не может содержать операторы обновления.

Ответ 2

Как и в ссылках, предоставленных PKD, db.collection.insert() не дает возможности увеличить. Вместо этого mongo insert вставляет новый документ в коллекцию. Upsert возможен только с помощью db.collection.update() и db.collection.save().

Если вам удастся передать документ в db.collection.insert(), который уже находится в коллекции, и, таким образом, имеет _id, аналогичный существующей _id, он будет генерировать дублирующее ключевое исключение.