您的位置:首页 > 数据库 > Mongodb

python数据存储系列教程——python中mongodb数据库操作:连接、增删查改、多级路径

2018-02-24 11:13 981 查看
全栈工程师开发手册 (作者:陈玓玏)

python教程全解

调试环境python3.6,调试python操作mongodb数据库,首先要在本地或服务器安装mongodb数据库。安装参考:http://blog.csdn.net/luanpeng825485697/article/details/79353263

在python3.6下我们使用pymongo库。

pip install pymongo


安装python库的方法,请查看Python库的安装与卸载

安装成功后就可以编程代码实现python对mongodb数据库的操作了

python3.6操作mongodb数据库前请先确保mongodb服务已经打开

python3.6下代码如下

#python3.6操作mongodb数据库。使用前请先确保mongodb服务已经打开

print("=====================mongodb数据库=====================")

from pymongo import MongoClient
from bson.objectid import ObjectId

# 连接数据库
conn = MongoClient('127.0.0.1', 27017)
db = conn.mydb   # 指定数据库名称,连接mydb数据库,没有则自动创建
my_set=db.test_set  #使用test_set集合,没有则自动创建

# 插入数据(insert插入一个列表多条数据不用遍历,效率高, save需要遍历列表,一个个插入)
users=[{"name":"zhangsan","age":18},{"name":"lisi","age":20}]
my_set.insert(users)   # insert可以插入一个对象或者对象列表
user={"name":"zhangsan","age":18,'li':[1,2,3,4,5,5]}
my_set.save(user)  # save只能插入一个对象

#返回插入的ID
print(my_set.inserted_ids)

# 查询数据(查询不到则返回None)
#查询全部
alluser = my_set.find()   # 数据集合pymongo.cursor.Cursor类型
#查询name=zhangsan的
alluser = my_set.find({"name":"zhangsan"})
#查询时的in操作
alluser = my_set.find({"age":{"$in":(20,30,35)}})
# 查询时的or操作
alluser = my_set.find({"$or":[{"age":20},{"age":35}]})
# 查询时的all操作
alluser = my_set.find({'li':{'$all':[1,2,3,4]}})   # 输出...'name': 'zhangsan', 'age': 18, 'li': [1, 2, 3, 4, 5, 6]}
#查询集合中age大于25的所有记录
alluser = my_set.find({"age":{"$gt":15}})    #(>)  大于 - $gt,     (<)  小于 - $lt,     (>=)  大于等于 - $gte     (<= )  小于等于 - $lte
#找出name的类型是String的
alluser = my_set.find({'name':{'$type':2}})
# Double    1
# String    2
# Object    3
# Array    4
# Binary data    5
# Undefined    6    已废弃
# Object id    7
# Boolean    8
# Date    9
# Null    10
# Regular Expression    11
# JavaScript    13
# Symbol    14
# JavaScript (with scope)    15
# 32-bit integer    16
# Timestamp    17
# 64-bit integer    18
# Min key    255    Query with -1.
# Max key    127

# 数据集排序
alluser.sort([("age",1)])  #在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序,-1为降序。
#limit()方法用来读取指定数量的数据
#skip()方法用来跳过指定数量的数据
alluser.skip(2).limit(6) #下面表示跳过两条数据后读取6条

# 遍历数据集
for i in alluser:
print(i)
# 统计
print(alluser.count())
# 查询一个记录
print(my_set.find_one({"name":"zhangsan"}))
print(my_set.find_one({'_id':ObjectId('5a8fd9f047d14523ec6d377c')}))

# 更新数据
# my_set.update(
#    <query>,    #查询条件
#    <update>,    #update的对象和一些更新的操作符
#    {
#      upsert: <boolean>,    #如果不存在update的记录,是否插入
#      multi: <boolean>,        #可选,mongodb 默认是false,只更新找到的第一条记录
#      writeConcern: <document>    #可选,抛出异常的级别。
#    }
# )

#修改字段的值
my_set.update({"name":"zhangsan"},{'$set':{"age":20}})
db.col.update({'_id':ObjectId('5a8fd9f047d14523ec6d377c')},{'$set':{'age':'33'}})
# 列表字段添加新元素
my_set.update({'name':"lisi"}, {'$push':{'li':4}})  # 在name为lisi的记录中的li字段中添加元素4
my_set.update({'name':"lisi"}, {'$push':{'li':[8,9]}})  # 在name为lisi的记录中的li字段中添加元素4、5
# 列表字段移除元素
my_set.update({'name':"lisi"}, {'$pop':{'li':1}})   # pop 移除最后一个元素(-1为移除第一个)
my_set.update({'name':"lisi"}, {'pull':{'li':3}})  #pull (按值移除) 移除3
my_set.update({'name':"lisi"}, {'$pullAll':{'li':[1,2,3]}})  # pullAll (按值移除全部符合条件的)

# 删除数据
# my_set.remove(
#    <query>,    #(可选)删除的文档的条件
#    {
#      justOne: <boolean>,    #(可选)如果设为 true 或 1,则只删除一个文档
#      writeConcern: <document>    #(可选)抛出异常的级别
#    }
# )

#删除name=lisi的全部记录
my_set.remove({'name': 'lisi'})

#删除name=zhangsan的某个id的记录
id = my_set.find_one({"name":"zhangsan"})["_id"]
my_set.remove(id)

#删除集合里的所有记录
db.users.remove()

# ===========多级路径元素=========
# 字典的属性值可以是另一个字典或者列表

# 增加
dict = {"name":"zhangsan",
"age":18,
"contact" : {
"email" : "1234567@qq.com",
"iphone" : "11223344"},
"contact1" : [
{
"email" : "111111@qq.com",
"iphone" : "111"},
{
"email" : "222222@qq.com",
"iphone" : "222"}
]
}
my_set.insert(dict)

# 查询
users=my_set.find({"contact.iphone":"11223344"})
user = my_set.find_one({"contact.iphone":"11223344"})  # 查询字典值
user1 = my_set.find_one({"contact1.1.iphone":"222"})  # 查询数组值
# 打印输出
print(user["contact"]["email"])
# 修改
result = my_set.update({"contact.iphone":"11223344"},{"$set":{"contact.email":"9999999@qq.com"}})

result = my_set.update({"contact.1.iphone":"222"},{"$set":{"contact.1.email":"222222@qq.com"}})
print(user1["contact1"][1]["email"])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐