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

Python每日一练——数据存储第八关:操作MongoDB数据库

Mongodb操作2-windows系统安装数据库

Python删除mongodb数据库和用户,查看Python操作mongodb的方法

Python 数据库骚操作 — MongoDB

Python操作MongoDB数据库