Python-MongoDB
Python-MongoDB
PYTHON MONGODB
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
• In MongoDB, a database is not created until it gets content, so if this is your first
time creating a database, you should create collection and create document before
you check if the database exists!
• You can check if a database exist by listing all databases in you system:
import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
print(myclient.list_database_names())
CHECK IF DB EXISTS
import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient['mydatabase']
mycol = mydb["customers"]
CHECK IF COLLECTION EXISTS
• In MongoDB, a collection is not created until it gets content, so if this is your first time
creating a collection, you should create document before you check if the collection exists!
• You can check if a collection exist in a database by listing all collections:
• Return a list of all collections in your database:
import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient['mydatabase']
mycol = mydb["customers"]
print(mydb.list_collection_names())
CHECK IF COLLECTION EXISTS
collist = mydb.list_collection_names()
if "customers" in collist:
print("The collection exists.")
else:
print("The collection does not exist.")
INSERT DOCUMENT
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
x = mycol.insert_one(mydict)
RETURN THE _ID FIELD
import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient['mydatabase']
mycol = mydb["customers"]
mydict = { "name": "Peter", "address": "Lowstreet 27" }
x = mycol.insert_one(mydict)
print(x.inserted_id)
RETURN THE _ID FIELD
• If you do not specify an _id field, then MongoDB will add one for you and
assign a unique id for each document
• In the example above no _id field was specified, so MongoDB assigned a
unique _id for the record (document).
INSERT MULTIPLE DOCUMENTS
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
x = mycol.find_one()
print(x)
FIND ALL
• To select data from a collection in MongoDB, we can also use the find() method.
• The find() method returns all occurrences in the selection.
• The first parameter of the find() method is a query object.
• In this example we use an empty query object, which selects all documents in the
collection.
• No parameters in the find() method gives you the same result as SELECT * in
MySQL.
FIND ALL
• 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)
RETURN ONLY SOME FIELDS
• The second parameter of the find() method is an object describing which fields to include in
the result.
• This parameter is optional, and if omitted, all fields will be included in the result.
• Return only the names and addresses, not the _ids
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
for x in mycol.find({},{ "address": 0 }):
print(x)
RETURN ONLY SOME FIELDS
• You get an error if you specify both 0 and 1 values in the same object (except if one
of the fields is the _id field):
import pymongo
myclient =
pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
for x in mycol.find({},{ "name": 1, "address": 0 }):
print(x)
QUERY
• 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 documents where address starts with the letter "S" or higher:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "address": { "$gt": "S" } }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
FILTER WITH REGULAR EXPRESSIONS
• Find 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" } }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
SORT THE RESULT
• Use the sort() method to sort the result in ascending or descending order.
• The sort() method takes one parameter for "fieldname" and one parameter for "direction"
(ascending is the default direction).
# Sort the result alphabetically by name:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mydoc = mycol.find().sort("name")
for x in mydoc:
print(x)
SORT DESCENDING
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mydoc = mycol.find().sort("name", -1)
for x in mydoc:
print(x)
DELETE DOCUMENT
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. The second
parameter is an object defining the new values of the document.
• 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.")
LIMIT THE RESULT
• To limit the result in MongoDB, we use the limit() method. The limit() method takes one
parameter, a number defining how many documents to return. Consider you have a
"customers" collection:
{'_id': 1, 'name': 'John', 'address': 'Highway37'}
{'_id': 2, 'name': 'Peter', 'address': 'Lowstreet 27'}
{'_id': 3, 'name': 'Amy', 'address': 'Apple st 652'}
{'_id': 4, 'name': 'Hannah', 'address': 'Mountain 21'}
{'_id': 5, 'name': 'Michael', 'address': 'Valley 345'}
{'_id': 6, 'name': 'Sandy', 'address': 'Ocean blvd 2'}
{'_id': 7, 'name': 'Betty', 'address': 'Green Grass 1'}
{'_id': 8, 'name': 'Richard', 'address': 'Sky st 331'}
{'_id': 9, 'name': 'Susan', 'address': 'One way 98'}
{'_id': 10, 'name': 'Vicky', 'address': 'Yellow Garden 2'}
{'_id': 11, 'name': 'Ben', 'address': 'Park Lane 38'}
{'_id': 12, 'name': 'William', 'address': 'Central st 954'}
{'_id': 13, 'name': 'Chuck', 'address': 'Main Road 989'}
{'_id': 14, 'name': 'Viola', 'address': 'Sideway 1633’}
LIMIT THE RESULT
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myresult = mycol.find().limit(5)
#print the result:
for x in myresult:
print(x)
36
THANK YOU!