Python Driver
Syntax#
- mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
Parameters#
Parameter | Detail |
---|---|
hostX | Optional. You can specify as many hosts as necessary. You would specify multiple hosts, for example, for connections to replica sets. |
:portX | Optional. The default value is :27017 if not specified. |
database | Optional. The name of the database to authenticate if the connection string includes authentication credentialsIf /database is not specified and the connection string includes credentials, the driver will authenticate to the admin database. |
?options | Connection specific options |
## Connect to MongoDB using pymongo |
from pymongo import MongoClient
uri = "mongodb://localhost:27017/"
client = MongoClient(uri)
db = client['test_db']
# or
# db = client.test_db
# collection = db['test_collection']
# or
collection = db.test_collection
collection.save({"hello":"world"})
print collection.find_one()
PyMongo queries
Once you got a collection
object, queries use the same syntax as in the mongo shell. Some slight differences are:
-
every key must be enclosed in brackets. For example:
db.find({frequencies: {$exists: true}})
becomes in
pymongo
(note theTrue
in uppercase):db.find({"frequencies": { "$exists": True }})
-
objects such as object ids or
ISODate
are manipulated using python classes. PyMongo uses its ownObjectId
class to deal with object ids, while dates use the standarddatetime
package. For example, if you want to query all events between 2010 and 2011, you can do:from datetime import datetime date_from = datetime(2010, 1, 1) date_to = datetime(2011, 1, 1) db.find({ "date": { "$gte": date_from, "$lt": date_to } }):
Update all documents in a collection using PyMongo
Let’s say you need to add a field to every document in a collection.
import pymongo
client = pymongo.MongoClient('localhost', 27017)
db = client.mydb.mycollection
for doc in db.find():
db.update(
{'_id': doc['_id']},
{'$set': {'newField': 10} }, upsert=False, multi=False)
The find
method returns a Cursor
, on which you can easily iterate over using the for in
syntax.
Then, we call the update
method, specifying the _id
and that we add a field ($set
). The parameters
upsert
and multi
come from mongodb (see here for more info).