python操作MONGODB数据库,提取部分数据再存储
Posted Vizier
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python操作MONGODB数据库,提取部分数据再存储相关的知识,希望对你有一定的参考价值。
目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条。几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数。从每个集合中提取的数据存放到新的对应集合中,新集合名称为原先集合加"_col"。
用到相关技术点:
操作MONGODB:
先通过IP和端口号连接到MONGODB所在的机器,得到一个MONGODB客户端对象,然后认证某个数据库的账号密码连接到该数据库,得到一个该数据库的对象。一个数据库下有很多集合(相当于SQL中的表),集合里数据存储格式是BSON(同JSON)格式,集合中有很多条文档(相当于SQL中的记录)。可以通过数据库对象得到一个集合的对象,通过集合的对象来进行数据库增删改查的操作。
MONGODB操作的函数:
创建数据库:mydb = myclient["runoobdb"]
查看该客户端的所有数据库:dblist = myclient.list_database_names()
判断数据库是否存在:if "runoobdb" in dblist: print("数据库已存在!")
创建集合:mycol = mydb["sites"]
查看该数据库的所有集合:collist = mydb. list_collection_names()
判断集合是否存在:if "sites" in collist: print("集合已存在!")
插入一个文档:
mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }
x = mycol.insert_one(mydict)
print(x)
输出结果:<pymongo.results.InsertOneResult object at 0x10a34b288>
insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。print(x.inserted_id)。如果我们在插入文档时没有指定 _id,MongoDB 会为每个文档添加一个唯一的 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)
插入查询结果文档集:
x.insert_many(mycol.find())
查询一条数据:
x = mycol.find_one() print(x)
查询集合中所有数据:
for x in mycol.find():
print(x)
查询指定字段:
for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }): ##0表示该字段不出现,1表示该字段出现。除了_id字段,其他字段数字要一致,即要么都为0要么都为1。
print(x)
条件查询:
等值查询:
myquery = { "name": "RUNOOB" }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
非等值查询:
# (>) 大于 - $gt
# (<) 小于 - $lt
# (>=) 大于等于 - $gte
# (<= ) 小于等于 - $lte
#例:查询集合中age大于25的所有记录
for i in my_col.find({"age":{"$gt":25}}):
print(i)
正则表达式查询:
## 读取 name 字段中第一个字母为 "R" 的数据
yquery = { "name": { "$regex": "^R" } }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
查询指定条数记录: 以上是关于python操作MONGODB数据库,提取部分数据再存储的主要内容,如果未能解决你的问题,请参考以下文章 Python每日一练——数据存储第八关:操作MongoDB数据库