zoukankan      html  css  js  c++  java
  • 使用 python 操作 mongodb 常用的操作

    pymongo 的安装命令 pip install pymongo.

    import pymongo
    

    数据库及集合查询(创建)

    1. 连接数据库
    2. 查询数据库中的数据库
    3. 查询数据库中的集合
    4. 创建数据库和集合只需要直接引用即可,如果不存在则自动创建。但是只有插入内容才会显示
    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"]      # 不存在自动创建集合
    

    数据插入及查询

    1. isert_one()insert_many() 函数分别用来插入一条或者多条文档,对应的返回值的 inserted_idinserted_ids 返回插入文档的 _id 值。
    2. 插入时们也可以手动的指定 _id 属性。
    3. 查询使用的函数为 find_one()find()。注意使用 find() 函数返回的是一个指针(cursor),而 find_one() 返回的是字典。
    4. 查询中的表达式和 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,要么全是 0
    
    for 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)
    

    数据的修改及删除

    1. 修改数据使用 update_one()update_many()。返回结果的 modified_count 属性给出修改文档个数, matched_count 给出插值匹配个数。
    2. 删除数据使用 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)
    
  • 相关阅读:
    nginx接收tcp请求转发server
    eclipse 配置github 提交代码
    eclipse安装JDK11
    java内存管理
    进程 线程 纤程 中断
    DCL单例为什么要加volatile
    如何清理history
    后置引用
    nc 工具使用
    ip_local_port_range 和 ip_local_reserved_ports
  • 原文地址:https://www.cnblogs.com/yabin/p/9656889.html
Copyright © 2011-2022 走看看