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!
A 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/