个人练习记录,看着菜鸟教程python mongodb,练习了一波。参考菜鸟教程文档。
‘’‘1、数据库创建、查看’’’
import pymongo
myclient = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
#创建一个数据库
mydb = myclient['connDB'] #在 MongoDB 中,数据库只有在内容插入后才会创建!
#获取所有数据库列表
dblist = myclient.list_database_names() #获取所有数据库
#判断一个数据库是否存在
if 'connDB' in dblist:
print("此数据库存在")
‘’‘2、集合创建、查看’’’
#创建一个集合
import pymongo
myclient = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
mycol = mydb['connCol'] #在 MongoDB 中,集合只有在内容插入后才会创建!
#查看某个数据库下的所有集合
mydb = myclient['connDB']
collist = mydb.list_collection_names() #获取所有的集合
#判断一个集合是否存在
if 'connCol' in collist:
print("此集合存在")
‘’’--------------------------------插入数据--------------------------------------’’’
‘’‘3、插入数据(insert_one(),insert_many())’’’
#insert_one(): insert_one() 方法返回 InsertOneResult 对象,
#该对象包含 inserted_id 属性,它是插入文档的 id 值。
import pymongo
myclient = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
mycol = mydb['connCol']
mydict = {"name":"RUNOOB", "alexa":"10000", "url":"https://www.runoob.com"}
x = mycol.insert_one(mydict)
print(x.inserted_id) #打印插入文档的id值。5f90e85bc4673b1df18a4ec1
print(mydict) #mydict会增加('_id')字段。
#insert_many(): insert_many() 方法返回 InsertManyResult 对象,
#该对象包含 inserted_ids 属性,该属性保存着所有插入文档的 id 值。
dicts = [{"name":"RUNOOB", "alexa":"100", "url":"https://www.runoob.com"},\
{"name":"QQ", "alexa":"101", "url":"https://www.qq.com"},\
{"name":"Facebook", "alexa":"10", "url":"https://www.facebook.com"}]
z = mycol.insert_many(dicts)
print(z) #打印插入的全部数据,包括_id
print(z.inserted_ids)
#打印插入文档的id值。[ObjectId('5f90e85bc4673b1df18a4ec2'), ..., ObjectId('5f90e85bc4673b1df18a4ec4')]
#插入指定_id的多个文档。
mydb = myclient['connDB']
mycol = mydb['site2']
mylist = [{"_id":1,"name":"RUNOOB", "cn_name":"菜鸟教程"},\
{"_id":2,"name":"Google", "address":"dfafdafd"}]
x = mycol.insert_many(mylist)
print(x.inserted_ids) #[1, 2]
‘’’----------------------------------查询文档----------------------------------------’’’
import pymongo
myclient = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
mydb = myclient['connDB']
mycol = mydb["connCol"]
#find_one():查询一条记录
x = mycol.find_one()
print(x) #{'_id': 1, 'name': 'RUNOOB', 'cn_name': '菜鸟教程'}
#find():可以查询集合中的所有数据
for x in mycol.find():
print(x) #循环打印全部数据
‘’’
(1)查询指定字段的数据:
find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。
除了 _id 你不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然。
简而言之,你指定某个字段(_id除外)为0,则其他字段不能指定为1(默认全部返回)。
指定某个字段(_id除外)为1,则其他字段不能再指定0(默认全部不返回)。
如果指定字段(_id除外),某字段为0,另外字段为1,则报错,因为剩下字段是否返回将无法确定。
‘’’
for x in mycol.find({},{'name':0}):
print(x) #不返回name,其他返回(包括_id)
for x in mycol.find({},{'_id':0,"name":1,"alexa":1}):
print(x) #返回name,alexa,不返回_id和其他字段。
# #错误:
# for x in mycol.find({},{'name':0,'alexa':1}):
# print(x)
'''(2)根据指定条件查询'''
#find() 中设置参数来过滤数据。
myquery = {"name":"RUNOOB"}
mydoc = mycol.find(myquery) #查找 name 字段为 "RUNOOB" 的数据
for x in mydoc:
print(x)
‘’’(3)高级查询:使用修饰符’’’
myquery = {"name":{"$gt": "H"}}
mydoc = mycol.find(myquery) #读取 name 字段中第一个字母 ASCII 值大于 "H" 的数据
for x in mydoc:
print(x)
‘’‘使用正则表达式查询’’’
#正则表达式修饰符只用于搜索字符串的字段。正则表达式修饰符条件为 {"$regex": "^R"}
myquery = {"name":{"$regex":"^R"}} #读取 name 字段中第一个字母为 "R" 的数据
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
'''返回指定条数记录:limit()'''
myresults = mycol.find().limit(3)
for x in myresults:
print(x)
‘’’-------------------------------------------------修改文档---------------------------------------------------------------’’’
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient['connDB']
mycol = mydb['connCol']
myquery = {"alexa":"10000"}
newvalues = {"$set": {"alexa":"12345"}}
#update_one()
mycol.update_one(myquery, newvalues) #update_one()方法修改匹配到的第一条记录
for x in mycol.find():
print(x)
#update_many()
myquery2 = {"name":{"$regex":"^R"}}
#查找所有以 R开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123
newvalues2 = {"$set": {"alexa": "123"}}
x=mycol.update_many(myquery2, newvalues2)
#查看修改的个数:
print(x.modified_count, "文档已修改")
‘’’-----------------------------------------------删除数据-------------------------’’’
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient['connDB']
mycol = mydb['connCol']
#delete_one():删除一个文档
myquery = {"name": "RUNOOB"}
mycol.delete_one(myquery)
for x in mycol.find():
print(x)
#delete_many():删除多个文档
myquery2 = {"name": {"$regex":"^R"}}
x = mycol.delete_many(myquery2)
#查看删除的个数
print(x.deleted_count, "文档已删除")
#delete_many({}):删除集合中的所有文档
x = mycol.delete_many({})
print(x.deleted_count, "个文档已删除")
‘’’-------------------------------------------文档排序----------------------------’’’
‘’’
sort() 方法可以指定升序或降序排序。
sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
‘’’
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["connDB"]
mycol = mydb["connCol"]
#sort(),默认升序
mydoc = mycol.find().sort("alexa")
for x in mydoc:
print(x)
#倒序排序
mydoc2 = mycol.find().sort("alexa", -1)
for x in mydoc2:
print(x)