zoukankan      html  css  js  c++  java
  • Mongo数据库基本操作

    从这两个类的继承来看,connection是继承了MongoClient的,建议使用MongoClient而不是使用Connection。(也就是说,MongoClient可以使用方法Connection都可以使用)

    from pymongo import MongoClient
    
    client = MongoClient('192.168.40.87', 27037)
    db_name = 'TCL_Useraction'
    db = client[db_name]
    collection_useraction = db['useraction']

    这里是通过字典的方式访问数据库和集合,同时你也可以通过.(点号)的方式访问

    2.插入数据

    save() VS insert()

    mongodb的save和insert函数都可以向collection里插入数据,但两者是有两个区别:

    一、save函数实际就是根据参数条件,调用了insert或update函数.如果想插入的数据对象存在,insert函数会报错,而save函数是改变原来的对象;如果想插入的对象不存在,那么它们执行相同的插入操作.这里可以用几个字来概括它们两的区别,即所谓"有则改之,无则加之".

    二、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。

    3.更新数据

    对于单个数据来说,可以更新后使用save方法

    update(criteria, objNew, upsert, mult)

    • criteria: 需要被更新的条件表达式
    • objNew: 更新表达式
    • upsert: 如目标记录不存在,是否插入新文档。
    • multi: 是否更新多个文档。
    collection_useraction.update({'gid':last_gid, 'time':l_date}, 
                                 {'$set':{'gid':last_gid}, 
                                  '$set':{'time':l_date}, 
                                  '$addToSet':{'categories':category_data}}, 
                                 upsert=True)

    4.删除数据

    db.users.drop() # 删除集合
    
    # remove(self, spec_or_id=None, safe=None, multi=True, **kwargs)
    # remove() 用于删除单个或全部文档,删除后的文档无法恢复。
    id = db.users.find_one({"name":"user2"})["_id"]
    db.users.remove(id) # 根据 id 删除一条记录
    db.users.remove() # 删除集合里的所有记录
    db.users.remove({'yy':5}) # 删除yy=5的记录

    5.查询

    # 查询 age 小于 15 的
    for u in db.users.find({"age":{"$lt":15}}):
        print(u)
    5.1 查询一条记录
    # 查询 name 等于 user8 的
    for u in db.users.find({"name":"user8"}):
        print(u)
    
    
    # 获取查询的一个
    u2 = db.users.find_one({"name":"user9"}) # 查不到时返回 None
        print(u2)
    5.2 查询特定键 (fields)

    特别说明
    在3.0版本中,这个参数已经改名为projection,若用fields会报错

    # select name, age from users where age = 21
    for u in db.users.find({"age":21}, ["name", "age"]):
        print(u)
    for u in db.users.find(fields = ["name", "age"]):
        print(u)
    5.3 排序(SORT)
    pymongo.ASCENDING # 也可以用 1 来代替
    pymongo.DESCENDING # 也可以用 -1 来代替
    
    for u in db.users.find().sort([("age", pymongo.ASCENDING)]):
        print(u)  # select * from 集合名 order by 键1
    
    for u in db.users.find().sort([("age", pymongo.DESCENDING)]):
        print(u) # select * from 集合名 order by 键1 desc
    
    for u in db.users.find().sort([("键1", pymongo.ASCENDING), ("键2", pymongo.DESCENDING)]):
        print(u) # select * from 集合名 order by 键1 asc, 键2 desc
    
    for u in db.users.find(sort = [("键1", pymongo.ASCENDING), ("键2", pymongo.DESCENDING)]):
        print(u) # sort 的另一种写法
    
    for u in db.users.find({"name":"user9"}, sort=[['name',1],['sex',1]], fields = ["name", "age", 'sex']):
        print(u) # 组合写法


    fof项目中使用场景小例子:
    import pymongo
    import datetime
    from pymongo import MongoClient
    
    connection = MongoClient('localhost')
    db = connection.fof
    stock_cache = db.stock_cache
    
    #post = {"20160301": "Mike","text": "My first blog post!","tags": ["mongodb", "python", "pymongo"],"date": datetime.datetime.utcnow()}
    post = {'date':'20160302',"stocks":['001','002'],'ep':{'001':'100','002':'101'},'market_value':{'001':'100m','002':'101m'},'stock_share':{'001':'100s','002':'101s'}}
    #db.stock_cache.drop()
    #db.stock_cache.insert(post)
    docs = db.stock_cache.find({'date':'20160301'})
    
    for doc in docs:
        stocks = doc.get('stocks')
        print('stocks',stocks)
        for stock in stocks:
            market_value = doc.get('market_value').get(stock)
            print('market_value',market_value)
            market_value = doc.get('stock_share').get(stock)
            print('stock_share', market_value)
    #mongoCall.insert({'name':'li'})
    
    
    
     


  • 相关阅读:
    窗口参数Hello Win32 之疯狂注释版
    返回代码hdu 2054 A==B?
    function类html5游戏开发零基础开发《圣诞老人送礼物》小游戏
    路径工程OpenCV依赖文件路径自动添加方法
    变形测试数据HDU1181:变形课(DFS)
    类参数Hello MFC 之疯狂注释版
    按钮保存ios学习之xcode到处ipa安装包
    clientapivc api TCP&UDP—helloworld
    文件下载Asp.net下载文件的实例
    选择代码在Ubuntu12.04.2上使用Xmonad窗口管理器(续)
  • 原文地址:https://www.cnblogs.com/hdulzt/p/6915652.html
Copyright © 2011-2022 走看看