Skip to Content
MongoDB and Python
book

MongoDB and Python

by Niall O'Higgins
September 2011
Intermediate to advanced
138 pages
1h 44m
English
O'Reilly Media, Inc.
Content preview from MongoDB and Python

Update-or-Insert: Upserts in MongoDB

A relatively common task in a database-powered application is to update an existing entry, or if not found insert it as a new record. MongoDB conveniently supports this as a single operation, freeing you from having to implement your own “if-exists-update-else-insert” logic. 10gen refer to this type of write operation as an “upsert”.

In PyMongo, there are three possible methods one can use to perform an upsert. These are Collection.save(), Collection.update() and Collection.find_and_modify(). We shall start by describing Collection.save() as it is the most straight forward method.

In the earlier section “Inserting a Document into a Collection” we used the Collection.insert() method to write a new document to the collection. However, we could have just as easily used the save() method. save() offers almost identical functionality to insert() with the following exceptions: save() can perform upserts and save() cannot insert multiple documents in a single call.

save() is quite easy to understand. If you pass it a document without an _id property it will perform an insert(), creating a brand new document. If, on the other hand, you pass it a document which contains an _id property it will update the existing document corresponding to that _id value, overwriting the already-present document with the document passed to save().

This is the essence of an upsert: If a document already exists, update it. Otherwise create a new document.

save() can be useful ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Data Science Fundamentals for Python and MongoDB

Data Science Fundamentals for Python and MongoDB

David Paper
MongoDB Basics

MongoDB Basics

David Hows, Peter Membrey, Eelco Plugge
MongoDB Fundamentals

MongoDB Fundamentals

Amit Phaltankar, Juned Ahsan, Michael Harrison, Liviu Nedov, Sam Anderson

Publisher Resources

ISBN: 9781449312817Errata Page