Python mongodb驱动安装
安装驱动
在max&linux里面直接在终端里面输入下面的语句就可以让python支持mongo
pip install pymongo
加载 pymongo
直接在交互终端里面输入下面的语句,加载pygmon模块
from pymongo import MongoClient
创建一个连接
使用MongoClient 创建一个连接:
client=MongoClient()
也可以通过传入参数进行选项设置
mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
具体的内容可以参与MongoDB URL
访问数据库对象
mongo的数据库不用事前创建,当你调用cient.DatabaseName,一般DatabaseName没有创建它会自动帮助创建一个数据库,第二次这样访问的时候就会直接创建的是之前创建的对象
b = client.primer
你也可以通过下面的方式来进行数据的访问
db=client[‘primer’]
插入数据
在mongo里面插入数据有两个方法insert_one()和insert_many(),前面的方式单次只能插入一个文档,后面的方法可以插入多个文档内容。倘若插入的集合没有事先定义,MongoDB会直接创建。
先决条件
我们通过 MongClient模块,并且创建一个连接,连接成功之后选择test数据库
from pymongo import MongoClient
client=MongoClient()
db=client.test2
插入一个文档
下面是将一个文档插入到restaurants的集合当中,如果这个restaurants集合没有包含在数据库当中,会自动进行创建。
result = db.restaurants.insert_one(
{
"address": {
"street": "2 Avenue",
"zipcode": "10075",
"building": "1480",
"coord": [-73.9557413, 40.7720266]
},
"borough": "Manhattan",
"cuisine": "Italian",
"grades": [
{
"date": datetime.strptime("2014-10-01", "%Y-%m-%d"),
"grade": "A",
"score": 11
},
{
"date": datetime.strptime("2014-01-16", "%Y-%m-%d"),
"grade": "B",
"score": 17
}
],
"name": "Vella",
"restaurant_id": "41704620"
}
)
上面的操作会返回一个InsertOneResult对象,它包含一个_id和inserted_id对象
result.inserted_id
查询数据
mongodb查询调用的是find()方法,可以传入一些查询的条件来查询想要的结果。返回的是一个可供遍历的结果集合,
对于下面所有的示例用的都是官网上面提示的一个实例文件,primer-dataset.json
下载完成之后通过在终端里面输入下面的语句就可以导入相应的数据
mongoimport –db test –collection restaurants –drop –file primer-dataset.json
对象的格式大概如下:
{‘_id’: ObjectId(‘5704d3c3a75b1775d3b21352’),
‘address’: {‘coord’: [-73.98513559999999, 40.7676919], ‘zipcode’: ‘10019’, ‘street’: ‘West 57 Street’, ‘building’: ‘351’},
‘name’: ‘Dj Reynolds Pub And Restaurant’,
‘borough’: ‘Manhattan’,
‘restaurant_id’: ‘30191841’,
‘cuisine’: ‘Irish’,
‘grades’: [{‘score’: 2, ‘date’: datetime.datetime(2014, 9, 6, 0, 0), ‘grade’: ‘A’},
{‘score’: 11, ‘date’: datetime.datetime(2013, 7, 22, 0, 0), ‘grade’: ‘A’},
{‘score’: 12, ‘date’: datetime.datetime(2012, 7, 31, 0, 0), ‘grade’: ‘A’},
{‘score’: 12, ‘date’: datetime.datetime(2011, 12, 29, 0, 0), ‘grade’: ‘A’}]}
查询所有的数据
下面的的语句调用的是find()的方法,返回restaurants当中所有集合中的所有对象.
cursor=db.restaurants.find()
迭代遍历cursor并且将结果进行输出
for document in cursor:
print(document)
指定条件查询
下面的查找操作仅显示borough为Manhattan的对象.
cursor = db.restaurants.find({"borough": "Manhattan"})
同样通过迭代遍历的方式输出查询的结果
for document in cursor:
print(document)
查询一个嵌入式的文档
在mongto里面的对象可以在自身包含另一个集合,比如下面的对象。
上面的primer-dataset.json里面的address是一个集合包含了coord,zipcode,street,building四个数据。
我们通过下面的语句查询address.zipcode仅为10075的集合
cursor = db.restaurants.find({"address.zipcode": "10075"})
for document in cursor:
print(document)
通过条件查询对象
下面的语句查询的是grandes.score大于30的对象
cursor = db.restaurants.find({"grades.score": {"$gt": 30}})
下面的语句查询的是grades.score小于10的集合
cursor = db.restaurants.find({"grades.score": {"$lt": 10}})
逻辑条件判断
在mongo查询的时候可以通过使用(AND)和(OR)来查询
下面的查询的语句相当于,仅显示cuisine为Italian和address.zipcode为10075的数据。只有同时满足才显示。
cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"})
for document in cursor:
print(document)
下面的查询的语句相当于,仅显示cuisine为Italian和address.zipcode为10075的数据。两个条件只要满足一个就可以.
cursor = db.restaurants.find({
"$or":[{"cuisine": "Italian", "address.zipcode": "10075"}]
}
)
for document in cursor:
print(document)
数据排序
可以通过调用 pymongo.ASCENDING()和pymongo.DESCENDING()来指定是按升降序进行排
import pymongo
cursor = db.restaurants.find().sort([
("borough", pymongo.ASCENDING),
("address.zipcode", pymongo.ASCENDING)
])