MongoDB: How to Insert if Not Exists


You can use the following syntax to insert a document into a collection in MongoDB only if it doesn’t already exist:

db.teams.update(
	{
	  team : 'Hornets'
	}, 
	 {
	  $setOnInsert: {team: 'Hornets', points: '58', rebounds: '20'}
	 },
	 {upsert: true}
)

This particular code checks if the field “team” has a value of “Hornets.” If this value exists, then nothing will happen.

However, if this value does not exist then it will insert a document with specific values for the “team”, “points”, and “rebounds” fields.

The following example shows how to use this syntax in practice.

Example: Insert if Not Exists in MongoDB

Suppose we have a collection called teams with the following documents:

db.teams.insertOne({team: "Mavs", points: 30, rebounds: 8})
db.teams.insertOne({team: "Spurs", points: 35, rebounds: 12})
db.teams.insertOne({team: "Rockets", points: 20, rebounds: 7})
db.teams.insertOne({team: "Warriors", points: 25, rebounds: 5})
db.teams.insertOne({team: "Cavs", points: 23, rebounds: 9})

Suppose we use the following code to attempt to insert a document for the team “Mavs”:

db.teams.update(
	{
	  team : 'Mavs'
	}, 
	 {
	  $setOnInsert: {team: 'Mavs', points: '58', rebounds: '20'}
	 },
	 {upsert: true}
)

Since the field “team” already contains information for the “Mavs”, none of the documents will be modified.

However, suppose we use the following code to insert a document for the team “Hornets”:

db.teams.update(
	{
	  team : 'Hornets'
	}, 
	 {
	  $setOnInsert: {team: 'Hornets', points: '58', rebounds: '20'}
	 },
	 {upsert: true}
)

Since the field “team” does not already contain information for the “Hornets”, a new document will be added to the collection with the values that we specified for each field.

Here’s what the updated collection looks like:

{ _id: ObjectId("6203df361e95a9885e1e764a"),
  team: 'Mavs',
  points: 30,
  rebounds: 8 }
{ _id: ObjectId("6203df361e95a9885e1e764b"),
  team: 'Spurs',
  points: 35,
  rebounds: 12 }
{ _id: ObjectId("6203df361e95a9885e1e764c"),
  team: 'Rockets',
  points: 20,
  rebounds: 7 }
{ _id: ObjectId("6203df361e95a9885e1e764d"),
  team: 'Warriors',
  points: 25,
  rebounds: 5 }
{ _id: ObjectId("6203df361e95a9885e1e764e"),
  team: 'Cavs',
  points: 23,
  rebounds: 9 }
{ _id: ObjectId("6203e17de42bfba74fc73325"),
  team: 'Hornets',
  points: '58',
  rebounds: '20' }

Notice that a new document has been added for the “Hornets” team.

Note: You can find the complete documentation for the $upsert function here.

Additional Resources

The following tutorials explain how to perform other common operations in MongoDB:

MongoDB: How to Add a New Field
MongoDB: How to Remove a Field
MongoDB: How to Count Distinct Values in Field

Leave a Reply

Your email address will not be published.