Was working on a module that would iterate through a row list that came back from a query and attempt to insert or update the specific columns of the returned rows to a collection on Mongo. Originally I was planning to use count({"id":row[id]}) > 0 to check for the existence of the given record in Mongo, and then execute a insert of push as needed. However I stumbled the update method which is part of pymongos collection level operators that allows me to execute all three actions, check for existence, insert or push, with one call.
So my original code to insert or update was as shown below:
#check if row exist
if coll.count({"MemberId": row["idclient"]}) > 0:
#Insert row into the Collection
coll.insert(details)
else:
#update the existing row
coll.push({"MemberId": str(row["idclient"])}, { $push: { "field1": str(row["field1"]), "field2": str(row["field2"])} })
As observable from above the push call requires us to decompose the details dictionary object into its elements to update.
However with the push I can skip these three lines and execute the same operation with one call:
coll.update(key, details, True)
I have to set up what key to use and also have to set the upsert flag to be true, then an update() (upsert) operation is performed and any existing document with that "_id" is overwritten. Otherwise an insert() operation is performed.
See below for the link on stack overflow that provided the motivation for this and the documentation on MongoDB.org that explain the workings of the update method.
http://stackoverflow.com/questions/2801008/mongodb-insert-if-not-exists
http://api.mongodb.org/python/current/api/pymongo/collection.html
Thanks for sharing such a informative blog! Home Exeter covers ALL types of electrical works, within domestic applications. This includes re-wires, fuse board upgrades, inspection and testing, fault finding, outside light/power and smoke and heat detection. You can view our full list of services in the menu bar. Please get more info on plumber exeter.
ReplyDelete