参考文章
1,引用 pymongo 包
from pymongo import MongoClient
2,链接mongodb
链接数据库dbname ,如果数据库 dbname 不存在,则创建。
myclient = MongoClient(host="192.168.1.12", port=27017)
mydb = myclient["dbname"]
mydb.authenticate("userName", "passwords", mechanism='SCRAM-SHA-1')
3,新增
新增,查询,修改,删除前必修指定集合 collectionName,如果不存在则创建。
mydb.get_collection("collectionName")
mydb.collection_names() 可以查询已存在集合
insert :插入数据, 返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值
mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}
result = mycol.insert(mydict)
print (result)
mylist = [
{"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
{"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
{"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
{"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
{"name": "Github", "alexa": "109", "url": "https://www.github.com"}
]
result = mycol.insert(mylist)
print (result)
执行结果
其他新增方法:
insert_one : 集合中插入一条文档
insert_many :集合中插入多个文档
4,查询
find_one :查询集合中的一条数据
find :查询集合中的所有数据,类似 SQL 中的 SELECT * 操作
myParams = {"name": "Taobao"}
result = mycol.find_one(myParams)
print(result)
print("------------------------------------")
result = mycol.find(myParams)
for item in result:
print(item)
执行结果
查询指定字段的数据。1 显示,0 隐藏。如:
{ "_id": 0, "name": 1, "alexa": 1 }
除了 _id 你不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然。
myParams = {"name": "Taobao"}
myColumn = {"_id": 0, "name": 1, "alexa": 1}
result = mycol.find_one(myParams, myColumn)
print(result)
print("------------------------------------")
result = mycol.find(myParams, myColumn)
for item in result:
print(item)
执行结果
高级查询
$gt:大于。如:{ "field" : { "$gt": value } }
$lt:小于。如:{ "field" : { "$lt": value } }
$gte:大于或等于。如:{ "field" : { "$gte": value } }
$lte:小于或等于。如:{ "field" : { "$lte": value } }
$ne:不等于。如:{ "field" : { "$ne": value } }
$in []: 在数组内。如:{ "field" : { "$in": [1,2,3] } }
$nin []: 不在数组内。如:{ "field" : { "$nin": [1,2,3] } }
$all []: $all和$in类似,但是他需要匹配条件内所有的值。如:{ "field" : { "$all": [1,2,3] } }
$size 计算长度。如:{ "field" : { "$size": 2} }
$exists 用来判断一个元素是否存在,true 存在,false 不存在。如:{ "field" : { "$exists": true} }
可以混合使用
myParams = {"alexa": {"$gte": "100", "$lte": "103"}}
myColumn = {"_id": 0, "name": 1, "alexa": 1}
result = mycol.find(myParams, myColumn)
for item in result:
print(item)
执行结果
使用正则表达式查询
{ "field" :{"$regex": "^R"}}
limit :指定条数的文档
sort :排序,1 顺序,-1 倒序
limit , sort 组合可以达到max,min 的效果
mycol.find().limit(3)
#max
mycol.find().sort({"age" : -1}).limit(1)
#min
mycol.find().sort({"age" : 1}).limit(1)
distinct :排除指定的属性,且去重。
result = mycol.distinct("name", myParams)
print(result)
执行结果
5,修改
update_one : 修改符合条件的第一条文档
update_many :修改符合条件的所有文档
myQuery = {"alexa": "10000"}
newValues = {"$set": {"alexa": "12345"}}
mycol.update_many(myQuery, newValues)
result = mycol.find()
for item in result:
print(item)
执行结果
6,删除
delete_one :删除一条文档
myQuery = {"name": "Taobao"}
mycol.delete_one(myQuery)
for x in mycol.find():
print(x)
delete_many : 删除多条文档,方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:
myQuery = {"name": "Taobao"}
mycol.delete_many(myQuery)
for x in mycol.find():
print(x)
drop : 删除集合
mycol.drop()