Parameter Detail
hostX 可选。可根据需要指定主机数量。例如,您可以指定多个主机,用于连接副本集。
:portX 可选。如果未指定,默认值为 :27017。
database 可选。如果未指定 /database,且连接字符串包含身份验证凭据,驱动程序将对管理数据库进行身份验证。
?options 特定连接选项

Section 14.1: 使用 pymongo 连接 MongoDB

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()

Section 14.2: PyMongo 查询

一旦有了集合对象,查询就可以使用与 mongo shell 相同的语法。稍有不同的是 每个键都必须用括号括起来。例如

db.find({frequencies: {$exists: true}})

变成 pymongo (注意 True 是大写):

db.find({"frequencies": { "$exists": True }})

对象 id 或 ISODate 等对象是使用 python 类来处理的。PyMongo 使用自己的 ObjectId 类来处理对象 id,而日期则使用标准的 datetime 包。例如,如果你想查询 2010 年至 2011 年之间的所有事件,你可以这样做

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 } }):

Section 14.3: 使用 PyMongo 更新集合中的所有文档

假设你需要为集合中的每个文档添加一个字段。

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)

查找方法会返回一个游标,使用 for in 语法可以轻松遍历该游标。然后,我们调用 update 方法,指定 _id 并添加一个字段 ($set)。参数 upsert 和 multi 来自 mongodb(更多信息请参见此处)。