pymongo 操作mongo.txt

    xiaoxiao2022-07-13  131

    PyMongo操作Mongo Database 1.连接到MongoDB客户端,使用默认主机(localhost),默认端口号(27017) import pymongo from pymongo import MongoClient client = MongoClient() client = MongoClient('localhost',27017) 也可使用MongoDB URI格式 client = MongoClient('mongodb://localhost:27017/') 2.使用数据库 属性风格: db = client.数据库名 示例: db = client.test 字典风格: db = client['test'] 注意: MongoDB数据库和集合,都是在插入第一条文档后才正式创建的。 删除数据库:db.dropDatabase() 3.连接到集合 属性风格: collection = db.集合名 示例: collection = db.posts 字典风格: collection = db['posts'] 删除posts集合: db.posts.drop() 4.文档 MongoDB中数据是JSON风格的文档。在PyMongo中,我们用字典表示文档。 post = { 'author':'Mike', 'text':'My first blog post!', 'tags':['mongodb','python','pymongo'], 'likes':10 } 5.插入一条文档insert_one() db.posts.insert_one(post) 生成一个叫library的数据库 db = client.library 生成一个叫books的集合 collection = db.books 生成一条叫book的文档: 书名title,作者author,出版社publisher,价格price book = { 'title':'A Small World', 'author':'Ann', 'publisher':'renming press', 'price':100 } 把book文档插入到books集合中 db.books.insert_one(book) 在mongo客户端,查看新生成的数据库,集合,以及文档内容 use library db.books.find().pretty() find_one():返回满足查找条件的“一个”文档,如果不存在,返回None。 示例: db = client.gaodb # 转到某个数据库下 db.posts.find_one() #查看该数据库里posts集合中的一个文档 pprint模块:格式化输出文档。 from pprint import pprint pprint(db.posts.find_one()) document = db.posts.find_one() pprint(document) find_one({满足的条件},{选择显示的键:1,或者需要隐藏的键:0}) 示例: 查找gaodb,posts集合中,Mike发的贴子,并隐藏_id键,只显示author和text键 db.posts.find_one({'author':'Mike'},{"_id":0,"author":1,"text":1}) db.posts.find_one({'author':'Lily'},{"_id":0,"author":1,"text":1}) 练习: 把library中,books集合里,price大于50的书的title和price列出来,隐藏_id键 db = client.library db.books.find_one({'price':{'$gt':50}}, {"_id":0, "title":1, "price":1}) 【注意】 '$gt'引号必须有。 MongoDB按照JSON格式存贮数据,JSON字符串是UTF-8编码, 所以,PyMongo也要保证任何字符串是UTF-8格式。 6.批量插入insert_many() db = client.gaodb new_posts = [ { "author":"Jimmy", "text":"another post", "tags":["bulkinsert","pymongo","python"], "likes":20 }, { "author":"Emily", "text":"mongodb is fun", "tags":["pymongo","python"], "likes":30 } ] db.posts.insert_many(new_posts) 7.查询多个文档find() db.posts.find()返回cursor游标对象 for post in db.posts.find(): pprint(post) 练习: 找出posts集合中,likes不小于15的文档,只显示author,text,likes三列 documents = db.posts.find({'likes':{'$gte':15}},{'author':1,'text':1,'likes':1,'_id':0}) for post in documents: pprint(post) 找出gaodb,posts集合中,tags包含"python"和"pymongo",并且长度为2的文档内容,只显示text和tags两列信息 提示:$all $size $and documents = db.posts.find( { "$and":[ {"tags":{"$size":2}}, {"tags":{"$all":["python","pymongo"]}} ] }, {"_id":0,"text":1,"tags":1} ) for post in documents: pprint(post) 8.count()计数: 查询一个集合中有多少条文档 db.posts.count() 查询posts中tags有三个标签的文档一共有多少条 db.posts.find({"tags":{"$size":3}}).count() 9.sort()排序 把posts集合中的文档按照likes排序 for post in db.posts.find().sort("likes"): pprint(post) 练习: 把posts中likes大于15的文档,按照author姓名排序打印出来 for post in db.posts.find({"likes":{"$gt":15}}).sort("author"): pprint(post) 10.修改一条文档update_one() db.集合名.update_one({要满足的条件},{修改的内容}) 例子: 把posts中,Jimmy发的贴子内容"text"改为"revised post" db.posts.update_one({"author":"Jimmy"},{"$set":{"text":"revised post"}}) db.posts.find_one({"author":"Jimmy"}) 练习题: 把posts中,Mikes发的贴子的likes增加3,要求用$inc修改器试一下。 db.posts.update_one({"author":"Mikes"},{"$inc":{"likes":3}}) 把Emily发的贴子中的tags中叫"python"的标签删除 提示:$pop,$pull db.posts.update_one({"author":"Emily"},{"$pop":{"tags":1}}) db.posts.update_one({"author":"Emily"},{"$pull":{"tags":"python"}}) 11.更新多个文档update_many() db.集合名.update_many({满足的条件},{修改的内容}) 例子: 把posts中,所有文档的tags标签中添加一个"database"标签 db.posts.update_many({},{"$push":{"tags":"database"}}) for post in db.posts.find({}, {"_id":0}): pprint.pprint(post) 练习: 把posts中,tags含有"python"这个标签的文档的likes增加5 要求:update_many({条件},{修改器,修改的内容}) db.posts.update_many({"tags":{"$in":["python"]}},{"$inc":{"likes":5}}) for p in db.posts.find({}, {"_id":0}): pprint.pprint(p) 把posts中,likes大于20的文档的总数列出来 提示:count() db.posts.find({"likes":{"$gt":20}}).count() 12.删除文档delete_one(), delete_many() db.集合名.delete_one({条件}) 删除一条文档 db.集合名.delete_many({条件}) 删除多条文档 练习: 把posts中,Emily发的贴子删除,要求用delete_one() db.posts.delete_one({"author":"Emily"}) 把posts中,likes小于100的贴子全部删除,要求用delete_many() db.posts.delete_many({"likes":{"$lt":100}}) 13.mongodb BIMFeaturesProperties库 小学机电合模 集合 获取所有 feature的类别及属于该类的feature的数量 的查询 mongo vs pymongo 1.mongo db['小学-机电合模'].aggregate([ {$group:{_id:"$cust_id", total:{$sum:"$amount"}}} ]) 2.pymongo db['小学-机电合模'].aggregate([ {"$group":{"_id":"$name", "total":{"$sum":1}}} ]) db['小学-机电合模'].find({"name": "内外热镀锌钢管-丝接与卡箍"}).pretty().limit(1) db['小学-机电合模'].find({"name":"消防桥架", "壁厚": 0},{"_id":0, "id":1, "壁厚": 1}).pretty() doc = db[collectionName].aggregate([ {$match:{"name": "消防桥架"}}, {"$group": {"_id": "$尺寸", "total": {"$sum": 1}}} ])
    最新回复(0)