Python和MongoDB

1.链接和断开

from pymongo import MongoClient   #导入PyMongo驱动中的MongoClient模块

c = MongoClient() #建立与数据库的连接

db = c.test #使用字典c引用该连接,选择test数据库

collection = db.items #使用db选择集合名为items的集合

2.插入数据

collection.insert_one(item) #item是已经定义好的文档,结果返回一个ObjectId值

同时插入多个文档(通过在单个字典中指定多个文档):collection.insert_many(two) #two为定义好的文档,结果返回两个个ObjectId值

3.搜索数据

find_one()用于搜索集合中匹配搜索条件的单个文档

find()可基于所提供的参数搜索多个文档(如果不指定参数,find()将返回集合中的所有文档)

搜索单个文档:

collection.find_one() #若未使用参数,默认返回集合中的第一个文档

假设希望搜索ItemNumber值为3456TFS的文档,并且不希望返回文档的_id:collection.find_one({"ItemNumber": "3456TFS"}, fields={'_id': False})

搜索多个文档:

  for doc in collection.find({"Location.Owner":"Walker, Jan"}):

    doc

4.点操作符:可用于搜索嵌入对象中的匹配元素;使用时只需要指定内嵌对象中一个数据项的键名

  for doc in collection.find({"Location.Department":" Development"}):

    doc

5.返回字段

如果文档较大,并且不希望返回文档存储的所有键值对:

for doc in collection.find({'Status': 'In use'}, Projection={'ItemNumber': True, 'Location.Owner' : True})

  doc

True表示返回,False表示隐藏

6.使用sort()、limit()和skip()简化查询(可以同时使用)

sort():按特定的键对结果进行排序

for doc in collection.find({'Status': 'In use'}, fields={'ItemNumber': True, 'Location.Owner': True}).sort('ItemNumber'):

  doc

limit():限制返回结果的总数

只返回在集合中搜索到的头两个文档,并且只返回ItemNumber(其中未指定搜索条件):

for doc in collection.find({}, {'ItemNumber':True}).limit(2):

  doc

skip():忽略前n个文档,返回匹配查询的其余文档

for doc in collection.find({}, {'ItemNumber':True}).skip(2):

  doc

7.聚集查询

使用count()统计数目:collection.count();更准确的统计查询:collection.find({"Status": "In use", "Location.Owner": "Walker, Jan"}).count()

使用distinct()统计唯一数据的数目:(获得不包含重复数据的准确统计)collection.distinct("参数")

使用聚集框架对数据分组:

使用aggregate()函数最强大的管道操作符$group将添加的文档按照标签进行分组,然后使用$sum聚集表达式基于它进行统计:

    collection.aggregate([{

      '$unwind': '$Tags'},

      {'$group': {'_id': 'Tags', 'Totals' : {'$sum': 1}}}

    ])

首先,aggregate()函数使用$unwind管道操作符,根据文档的'$Tags'数组(注意必须在名字中使用$)创建了一个文档流。接下来,调用$group管道操作符,将所有唯一的标签的值用作它们的'_id',创建了一个单行以及它们的总数--使用$group的$sum表达式计算'Totals'值。

将结果排序,通过添加管道操作符$sort实现,需要导入SON模块:from bson.son import SON

    collection.aggregate([{

      '$unwind': '$Tags'},

      {'$group': {'_id': 'Tags', 'Totals' : {'$sum': 1}}},

      {'$sort': SON([('Totals', -1)])}   #对Totals的值降序排序

    ])

8.使用条件操作符重定义查询(略)

9.使用正则表达式执行搜索

import re

#搜索ItemNumber含有4的文档

for doc in collection.find({'ItemNumber': re.compile('4')}, {"ItemNumber" : True}):

  doc

10.更新数据

update_one(arg, doc):用于更新一个匹配的文档

update_many(arg, doc):用于更新任意匹配的文档

arg参数指定了用于匹配文档的键值信息,doc参数包含了更新后的信息

例如:

#定义更新数据

update=({....})

#执行更新

collection.update_one({"ItemNumber": "6789SID"}, update)

#检查更新结果

collection.find_one({"Type": "Chair"})

11.修改操作符(略)

12.批处理数据(略)

13.删除数据

  collection.delete_one({"Status":"In use"})

14.在两个文档之间创建链接(略)

posted @ 2018-03-27 16:05  Jysu  阅读(265)  评论(0编辑  收藏  举报