Is there an "upsert" option in the mongodb insert command?

MongodbMongodb Query

Mongodb Problem Overview


I know this may be a silly question, but I read on an e-book that there is an upsert option in MongoDB insert. I couldn't find proper documentation about this. Can someone educate me about this?

Mongodb Solutions


Solution 1 - Mongodb

Since upsert is defined as operation that "creates a new document when no document matches the query criteria" there is no place for upserts in insert command. It is an option for the update command. If you execute command like below it works as an update, if there is a document matching query, or as an insert with document described by update as an argument.

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

MongoDB 3.2 adds replaceOne:

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

which has similar behavior, but its replacement cannot contain update operators.

Solution 2 - Mongodb

As in the links provided by PKD, db.collection.insert() provides no upsert possibility. Instead, mongo insert inserts a new document into a collection. Upsert is only possible using db.collection.update() and db.collection.save().

If you happen to pass a document to db.collection.insert() which is already in the collection and thus has an _id similar to an existing _id, it will throw a duplicate key exception.

Solution 3 - Mongodb

For upserting a singe document using the java driver:

FindOneAndReplaceOptions replaceOptions = new FindOneAndReplaceOptions();
replaceOptions.upsert(true);
collection.findOneAndReplace(
		Filters.eq("key", "value"),
		document,
		replaceOptions
);

Although uniqueness should be ensured from Filters.eq("key", "value") otherwise there is a possibility of adding multiple documents. See this for more

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionastroanuView Question on Stackoverflow
Solution 1 - Mongodbzero323View Answer on Stackoverflow
Solution 2 - MongodbglormphView Answer on Stackoverflow
Solution 3 - MongodbNikhil SahuView Answer on Stackoverflow