zoukankan      html  css  js  c++  java
  • Python和MongoDB

    1.链接和断开

    from pymongo import MongoClient   #导入PyMongo驱动中的MongoClient模块

    c = MongoClient() #建立与数据库的连接

    db = c.test #使用字典c引用该连接,选择test数据库

    collection = db.items #使用db选择集合名为items的集合

    2.插入数据

    collection.insert_one(item) #item是已经定义好的文档,结果返回一个ObjectId值

    同时插入多个文档(通过在单个字典中指定多个文档):collection.insert_many(two) #two为定义好的文档,结果返回两个个ObjectId值

    3.搜索数据

    find_one()用于搜索集合中匹配搜索条件的单个文档

    find()可基于所提供的参数搜索多个文档(如果不指定参数,find()将返回集合中的所有文档)

    搜索单个文档:

    collection.find_one() #若未使用参数,默认返回集合中的第一个文档

    假设希望搜索ItemNumber值为3456TFS的文档,并且不希望返回文档的_id:collection.find_one({"ItemNumber": "3456TFS"}, fields={'_id': False})

    搜索多个文档:

      for doc in collection.find({"Location.Owner":"Walker, Jan"}):

        doc

    4.点操作符:可用于搜索嵌入对象中的匹配元素;使用时只需要指定内嵌对象中一个数据项的键名

      for doc in collection.find({"Location.Department":" Development"}):

        doc

    5.返回字段

    如果文档较大,并且不希望返回文档存储的所有键值对:

    for doc in collection.find({'Status': 'In use'}, Projection={'ItemNumber': True, 'Location.Owner' : True})

      doc

    True表示返回,False表示隐藏

    6.使用sort()、limit()和skip()简化查询(可以同时使用)

    sort():按特定的键对结果进行排序

    for doc in collection.find({'Status': 'In use'}, fields={'ItemNumber': True, 'Location.Owner': True}).sort('ItemNumber'):

      doc

    limit():限制返回结果的总数

    只返回在集合中搜索到的头两个文档,并且只返回ItemNumber(其中未指定搜索条件):

    for doc in collection.find({}, {'ItemNumber':True}).limit(2):

      doc

    skip():忽略前n个文档,返回匹配查询的其余文档

    for doc in collection.find({}, {'ItemNumber':True}).skip(2):

      doc

    7.聚集查询

    使用count()统计数目:collection.count();更准确的统计查询:collection.find({"Status": "In use", "Location.Owner": "Walker, Jan"}).count()

    使用distinct()统计唯一数据的数目:(获得不包含重复数据的准确统计)collection.distinct("参数")

    使用聚集框架对数据分组:

    使用aggregate()函数最强大的管道操作符$group将添加的文档按照标签进行分组,然后使用$sum聚集表达式基于它进行统计:

        collection.aggregate([{

          '$unwind': '$Tags'},

          {'$group': {'_id': 'Tags', 'Totals' : {'$sum': 1}}}

        ])

    首先,aggregate()函数使用$unwind管道操作符,根据文档的'$Tags'数组(注意必须在名字中使用$)创建了一个文档流。接下来,调用$group管道操作符,将所有唯一的标签的值用作它们的'_id',创建了一个单行以及它们的总数--使用$group的$sum表达式计算'Totals'值。

    将结果排序,通过添加管道操作符$sort实现,需要导入SON模块:from bson.son import SON

        collection.aggregate([{

          '$unwind': '$Tags'},

          {'$group': {'_id': 'Tags', 'Totals' : {'$sum': 1}}},

          {'$sort': SON([('Totals', -1)])}   #对Totals的值降序排序

        ])

    8.使用条件操作符重定义查询(略)

    9.使用正则表达式执行搜索

    import re

    #搜索ItemNumber含有4的文档

    for doc in collection.find({'ItemNumber': re.compile('4')}, {"ItemNumber" : True}):

      doc

    10.更新数据

    update_one(arg, doc):用于更新一个匹配的文档

    update_many(arg, doc):用于更新任意匹配的文档

    arg参数指定了用于匹配文档的键值信息,doc参数包含了更新后的信息

    例如:

    #定义更新数据

    update=({....})

    #执行更新

    collection.update_one({"ItemNumber": "6789SID"}, update)

    #检查更新结果

    collection.find_one({"Type": "Chair"})

    11.修改操作符(略)

    12.批处理数据(略)

    13.删除数据

      collection.delete_one({"Status":"In use"})

    14.在两个文档之间创建链接(略)

  • 相关阅读:
    OC ----关于时间的处理
    OC-- 判断字符串是否是纯数字
    OC 判断字符串是否只存在只有空格
    将Json字符串转换为数组
    调用接口时对参数的排序、生成签名、生成随机数,获取唯一标示符
    关于UIAlertView弹出警告框自动消失
    AVAudioPlayer 获取语音的长度(时间)
    AFN 请求 https get
    TableView  — reloadData     刷新
    mapView 地图视图
  • 原文地址:https://www.cnblogs.com/sujianyun/p/8658007.html
Copyright © 2011-2022 走看看