![](https://i-blog.csdnimg.cn/blog_migrate/11ab61846568f7310c1fec6b75306fcd.jpeg)
全栈工程师开发手册 (作者:陈玓玏)
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服务已经打开
启动mongodb方式参考:https://blog.csdn.net/luanpeng825485697/article/details/79353263
python3.6下代码如下
#!/usr/bin/env python
#python3.6操作mongodb数据库。使用前请先确保mongodb服务已经打开
print("=====================mongodb数据库=====================")
from pymongo import MongoClient
from bson.objectid import ObjectId
import datetime
# 连接数据库
conn = MongoClient('9.87.159.173', 8081)
db = conn.test # 指定数据库名称,连接mydb数据库,没有则自动创建
my_set=db.test #使用test_set集合,没有则自动创建
# # 插入数据(insert插入一个列表多条数据不用遍历,效率高, save需要遍历列表,一个个插入)
# users=[{"name":"zhangsan","age":18,"updatetime":datetime.datetime.now()},{"name":"lisi","age":20,"updatetime":datetime.datetime.now()}]
# my_set.insert(users) # insert可以插入一个对象或者对象列表
# user={"name":"zhangsan","age":18,'li':[1,2,3,4,5,5],"updatetime":datetime.datetime.now()}
# 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字段中添加元素一个list元素。注意不知添加8和9两个元素
# 列表字段移除元素
# my_set.update({'name':"lisi"}, {'$pop':{'li':1}}) # pop 移除最后1个元素(-1为移除第一个)
my_set.update({'name':"lisi"}, {'$pull':{'li':4}}) # pull (按值移除) 移除值为4的所有元素
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"])