pymongo模块
连接mongodb
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017") # dblist = myclient.list_database_names() # 列出所有库 mydb = myclient['cmdb_t'] # collist = mydb.list_collection_names() # 列出所有库中的表collection mycol = mydb['rec_project']
insert操作
# 插入一行数据 mydict = {'k1':'v1','k2':'v2'} x = mycol.insert_one(mydict) print(x.inserted_id) # 返回值为插入的数据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) # 输出插入的所有文档对应的 _id 值 print(x.inserted_ids) # 插入指定_id的多行数据 mylist = [ { "_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": "知乎"} ] x = mycol.insert_many(mylist) # 输出插入的所有文档对应的 _id 值 print(x.inserted_ids)
update操作
myquery = {"alexa": "100"} newvalue = {"$set":{"alexa": "12345"}} mycol.update(myquery,newvalue) for x in mycol.find(): print(x) myquery = {"alexa": {"$regex":"^10"}} newvalue = {"$set":{"alexa": "12345"}} mycol.update(myquery,newvalue) # 只改一个 for x in mycol.find(): print(x) myquery = {"alexa": {"$regex":"^123"}} newvalue = {"$set":{"alexa": "54321"}} mycol.update_one(myquery,newvalue) # 只改一个 for x in mycol.find(): print(x) myquery = {"alexa": {"$regex":"^10"}} newvalue = {"$set":{"alexa": "221010"}} mycol.update_many(myquery,newvalue) # 改所有 for x in mycol.find(): print(x)
find操作
# 查看一条数据 x = mycol.find_one() print(x) # 查看所有数据 _all = mycol.find() for i in _all: print(i) # 指定返回字段,指定字段是否返回要一致,要么都指定1,要么都指定0,只_id字段例外 _all = mycol.find({},{"_id":0,"name":1}) for i in _all: print(i) mycol.find({},{ "_id": 0 }) 除了id字段都返回 # 指定条件查询 myquery = { "name": "RUNOOB" } # = mydoc = mycol.find(myquery) for i in mydoc: print(i) myquery = { "name": { "$gt": "H" } } # > mydoc = mycol.find(myquery) for i in mydoc: print(i) # 正则 myquery = { "name": { "$regex": "^R" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)
myresult = mycol.find().limit(3) # limit for x in myresult: print(x) myresult = mycol.find().sort('alexa') # sort for x in myresult: print(x) myresult = mycol.find().sort('alexa',-1) # sort desc for x in myresult: print(x)
delete操作
mycol.delete_one({'name':'Taobao'}) # 删除一个 for x in mycol.find():print(x) r = mycol.delete_many({'name':{"$regex":"^F"}}) # 删除多个并返回r print(r.deleted_count) # 查看删除的数据条数 x = mycol.delete_many({}) # 删除所有 print(x.deleted_count, u"个文档已删除") mycol.drop() # 删除当前集合,相当于删表
批量操作
from pymongo import InsertOne, DeleteOne, ReplaceOne requests = [InsertOne({'y': 1}), DeleteOne({'x': 1}),ReplaceOne({'w': 1}, {'z': 1}, upsert=True)] result = db.test.bulk_write(requests)
>>> result.inserted_count 1 >>> result.deleted_count 1 >>> result.modified_count 0 >>> result.upserted_ids {2: ObjectId('54f62ee28891e756a6e1abd5')}
参考:
https://api.mongodb.com/python/current/api/pymongo/collection.html