pymongo 的安装命令 pip install pymongo
.
import pymongo
数据库及集合查询(创建)
- 连接数据库
- 查询数据库中的数据库
- 查询数据库中的集合
- 创建数据库和集合只需要直接引用即可,如果不存在则自动创建。但是只有插入内容才会显示
myclient = pymongo.MongoClient("mongodb://localhost:27017")dblist = myclient.list_database_names()print(dblist)if 'runoob' in dblist: myclient.drop_database("runoob") print("runoob db deleted.")
mydb = myclient["runoob"] # 不存在自动创建数据库collist = mydb.list_collection_names()print(collist)myCol = mydb["site"] # 不存在自动创建集合
数据插入及查询
isert_one()
和insert_many()
函数分别用来插入一条或者多条文档,对应的返回值的inserted_id
和inserted_ids
返回插入文档的_id
值。- 插入时们也可以手动的指定
_id
属性。 - 查询使用的函数为
find_one()
和find()
。注意使用find()
函数返回的是一个指针(cursor),而find_one()
返回的是字典。 - 查询中的表达式和 mongodb shell 中的一样,具体查询方法可以参考 mongodb 查询语法。
mydict = {"name":"RUNOOB","alexa":"10000","url":"https://www.runoob.com"}x = myCol.insert_one(mydict)print(x)print("inserted id is ",x.inserted_id)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" }]x = myCol.insert_many(mylist)print("inserted ids are ",x.inserted_ids)mylist2 = [ { "_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"}, { "_id": 2, "name": "Google", "address": "Google 搜索"}, { "_id": 3, "name": "Facebook", "address": "脸书"}, { "_id": 4, "name": "Taobao", "address": "淘宝"}, { "_id": 5, "name": "Zhihu", "address": "知乎"}]try: x = myCol.insert_many(mylist2) print("inserted ids are ",x.inserted_ids)except: pass
x = myCol.find_one()print('x type is ',type(x))print(x)docs = myCol.find()print('docs type is ',type(docs))for v in docs: print(v)
# 查询指定字段数据,除 _id 字段以外,其他字段要么全是 1,要么全是 0for x in myCol.find({},{"_id":0,"name":1,"alexa":1}): print(x)print('---------')# 查询 name 字段第一个字母 ASCII 值大于 H 的数据myquery = {"name":{"$gt":"H"}}myDocs = myCol.find(myquery)for v in myDocs: print(v)print('---------')# 正则表达式查询 name 以 R 开头的文档myQuery = {"name":{"$regex":"^R"}}myDocs = myCol.find(myQuery)for v in myDocs: print(v)print('---------')# 指定返回查询结果的数目for x in myCol.find().limit(3): print(x)
数据的修改及删除
- 修改数据使用
update_one()
和update_many()
。返回结果的modified_count
属性给出修改文档个数,matched_count
给出插值匹配个数。 - 删除数据使用
delete_one()
和delete_many()
。返回结果的deleted_count
属性给出删除文档个数。
myQuery = {"alexa":"10000"}newValue = {"$set":{"alexa":"12345"}}x = myCol.update_one(myQuery,newValue)print(x.modified_count,x.matched_count)for v in myCol.find(): print(v)print('---------')myQuery = {"name":{"$regex":"^F"}}newValue = {"$set":{"alexa":"123"}}x = myCol.update_many(myQuery,newValue)print(x.modified_count,x.matched_count)
myQuery = {"name":"Taobao"}x = myCol.delete_one(myQuery)print(x.deleted_count)for v in myCol.find(): print(v)print('---------')myQuery = {"name":{"$regex":"^F"}}x = myCol.delete_many(myQuery)print(x.deleted_count)