Я знаю, что это может быть глупый вопрос, но я читал в электронной книге, что есть опция upsert в mongo insert. Я не мог найти надлежащую документацию об этом. Может ли кто-нибудь просветить меня об этом?
Есть ли опция "upsert" в команде mongodb insert?
Ответ 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
, он будет генерировать дублирующее ключевое исключение.
Ответ 3
Google "mongodb upsert", bang 3-й результат:) docs.mongodb.org/manual/reference/method/db.collection.update
Ответ 4
Ищите текст "upsert" на этих двух страницах: