Python

How to work with MongoDB in Python

python-and-mongodb

MongoDB is one of the most popular NoSQL database. MongoDB stores data in JSON-like documents, which makes the database very flexible and scalable. You can download a free MongoDB database from the url : https://www.mongodb.com.  You need to install MongoDB Driver – PyMongo to access the MongoDB database.

Use the command below to install MongoDb Driver using PIP:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>python -m pip install pymongo 

Creating a Database

To create a database in MongoDB, start by creating a MongoClient object, then specify a connection URL with the correct ip address and the name of the database you want to create.

MongoDB will create the database if it does not exist, and make a connection to it.

Create a database called “mydatabase”:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

mydb = myclient["mydatabase"]

Important: In MongoDB, a database is not created until it gets content!

collection in MongoDB is the same as a table in SQL databases. and A document in MongoDB is the same as a record in SQL databases.

MongoDB waits until you have created a collection (table), with at least one document (record) before it actually creates the database (and collection).

Check if “mydatabase” exists:

dblist = myclient.list_database_names()
if "mydatabase" in dblist:
  print("The database exists.")

Creating a Collection

To create a collection in MongoDB, use database object and specify the name of the collection you want to create.

MongoDB will create the collection if it does not exist. Create a collection called “customers”:

Important: In MongoDB, a collection is not created until it gets content!

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

Insert Into Collection

To insert a record, or document as it is called in MongoDB, into a collection, we use the insert_one() method.

The first parameter of the insert_one() method is a dictionary containing the name(s) and value(s) of each field in the document you want to insert.

Insert a record in the “customers” collection:

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mydict = { "name": "John", "address": "Highway 37" }
x = mycol.insert_one(mydict)
print(x.inserted_id)

Note : If you do not specify an _id field, then MongoDB will add one for you and assign a unique id for each document.

Insert Multiple Documents

To insert multiple documents into a collection in MongoDB, we use the insert_many() method.

The first parameter of the insert_many() method is a list containing dictionaries with the data you want to insert:

import pymongo

myclient = pymongo.MongoClient(“mongodb://localhost:27017/”)
mydb = myclient[“mydatabase”]
mycol = mydb[“customers”]

mylist = [
  { “name”: “Amy”, “address”: “Apple st 652”},
  { “name”: “Hannah”, “address”: “Mountain 21”},
  { “name”: “Michael”, “address”: “Valley 345”},
  { “name”: “Sandy”, “address”: “Ocean blvd 2”},
  { “name”: “Betty”, “address”: “Green Grass 1”},
  { “name”: “Richard”, “address”: “Sky st 331”},
  { “name”: “Susan”, “address”: “One way 98”},
  { “name”: “Vicky”, “address”: “Yellow Garden 2”},
  { “name”: “Ben”, “address”: “Park Lane 38”},
  { “name”: “William”, “address”: “Central st 954”},
  { “name”: “Chuck”, “address”: “Main Road 989”},
  { “name”: “Viola”, “address”: “Sideway 1633”}
]

x = mycol.insert_many(mylist)

#print list of the _id values of the inserted documents:
print(x.inserted_ids)

The insert_many() method returns a InsertManyResult object, which has a property, inserted_ids, that holds the ids of the inserted documents.

Find the first document in the customers collection:

import pymongo

myclient = pymongo.MongoClient(“mongodb://localhost:27017/”)
mydb = myclient[“mydatabase”]
mycol = mydb[“customers”]

x = mycol.find_one()

print(x)

Return all documents in the “customers” collection, and print each document:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find():
print(x)

Filter the Result

When finding documents in a collection, you can filter the result by using a query object.The first argument of the find() method is a query object, and is used to limit the search.

Find document(s) with the address “Park Lane 38”:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

myquery = { "address": "Park Lane 38" }

mydoc = mycol.find(myquery)

for x in mydoc:
  print(x)

Delete Many Documents

To delete more than one document, use the delete_many() method.The first parameter of the delete_many() method is a query object defining which documents to delete.

Delete all documents were the address starts with the letter S:

import pymongo

myclient = pymongo.MongoClient(“mongodb://localhost:27017/”)
mydb = myclient[“mydatabase”]
mycol = mydb[“customers”]

myquery = { “address”: {“$regex”: “^S”} }

x = mycol.delete_many(myquery)

print(x.deleted_count, ” documents deleted.”)

Delete All Documents in a Collection


To delete all documents in a collection, pass an empty query object to the delete_many() method:

import pymongo

myclient = pymongo.MongoClient(“mongodb://localhost:27017/”)
mydb = myclient[“mydatabase”]
mycol = mydb[“customers”]

x = mycol.delete_many({})

print(x.deleted_count, ” documents deleted.”)

Update Collection

You can update a record, or document as it is called in MongoDB, by using the update_one() method.

The first parameter of the update_one() method is a query object defining which document to update.

Note: If the query finds more than one record, only the first occurrence is updated.

Change the address from “Valley 345” to “Canyon 123”:

import pymongo

myclient = pymongo.MongoClient(“mongodb://localhost:27017/”)
mydb = myclient[“mydatabase”]
mycol = mydb[“customers”]

myquery = { “address”: “Valley 345” }
newvalues = { “$set”: { “address”: “Canyon 123” } }

mycol.update_one(myquery, newvalues)

#print “customers” after the update:
for x in mycol.find():
  print(x)

Update Many

To update all documents that meets the criteria of the query, use the
update_many() method.

Update all documents where the address starts with the letter “S”:

import pymongo

myclient = pymongo.MongoClient(“mongodb://localhost:27017/”)
mydb = myclient[“mydatabase”]
mycol = mydb[“customers”]

myquery = { “address”: { “$regex”: “^S” } }
newvalues = { “$set”: { “name”: “Minnie” } }

x = mycol.update_many(myquery, newvalues)

print(x.modified_count, “documents updated.”)

You can find more about Python on https://www.w3schools.com/