Я знаю, что это может быть глупый вопрос, но я прочитал в электронной книге, что в вставке MongoDB есть опция upsert
. Я не мог найти надлежащую документацию по этому поводу. Может ли кто-нибудь просветить меня об этом?
Есть ли опция upsert в команде вставки mongodb?
Ответы (2)
Поскольку upsert
определяется как операция, которая "создает новый документ, когда ни один документ не соответствует критериям запроса", для команды upserts
in insert
места нет. Это опция для команды update
. Если вы выполняете команду, как показано ниже, она работает как update
, если есть документ, соответствующий query
, или как insert
с документом, описанным update
в качестве аргумента.
db.collection.update(query, update, {upsert: true})
MongoDB 3.2 добавляет replaceOne
:
db.collection.replaceOne(query, replacement, {upsert: true})
который ведет себя аналогично, но его replacement
не может содержать операторов обновления.
this.update( { _id : obj._id } , obj , true )
, если typeof( obj._id ) != "undefined"
, но это не более чем обертка.
- person zero323; 14.11.2013
True
, но в оболочке Mongo это true
. В Mongo нет bool
как True
.
- person WesternGun; 17.01.2018
Как и в ссылках, предоставленных PKD, db.collection.insert()
не предоставляет возможности upsert. Вместо этого mongo insert вставляет новый документ в коллекцию. Upsert возможен только с использованием db.collection.update()
и db.collection.save()
.
Если вы передадите в db.collection.insert()
документ, который уже находится в коллекции и, таким образом, имеет _id
, аналогичный существующему _id
, будет выдано исключение с повторяющимся ключом.