python连接及操作mongodb

1、连接数据库(MongoClient VS Connection)    从两个类继承来看,connection是继承MongoClient的,建议使用MongoClient。

    class MongoClient(pymongo.common.BaseObject)

        Connection to MongoDB.

        Method resolution order:

            MongoClient

            pymongo.common.BaseObject

            __builtin__.object

VS

    class Connection(pymongo.mongo_client.MongoClient)

        Connection to MongoDB.

        Method resolution order:

            Connection

            pymongo.mongo_client.MongoClient

            pymongo.common.BaseObject

            __builtin__.object

例:

    from pymongo import MongoClient

    client = MongoClient('192.168.127.117', 27037)

    db_name = 'TT_Useraction'

    db = client[db_name]

    collection_useraction = db['useraction']


2、插入数据(save() VS insert())

    区别:

        1、save函数实际是根据参考条件,调用insert或update函数,如果想插入的数据存在insert函数会报错,而save函数是改变原来的对象;如果插入的对象不存在,那么执行相同的插入操作。

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


3、更新数据

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

    update(criteria,objNew,upsert,mult)    criteria:需要被更新的条件表达式;objNew:更新表达式;upsert:如目标记录不存在,是否插入新文档;multi:是否更新多个文档。

例:

    collection_useraction.update({'gid':last_id, 'time':l_date}, {'$set':{'gid':last_id}, '$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 )    #用于删除单个或全部文档,删除后的文档无法恢复

    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":{"$it":15}}):

        print(u)

    #查询name等于user8的

    for u in db.users.find({"name":"user8"}):

        print(u)

    #获取查询的一个

    u2 = db.users.find_one({"name":"user9"})

    print(u2)

    # 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)


    pymongo.ASCENDING    #可以用1来代替

    pymongo.DESCENDING    #可以用-1来代替

    # select * from 集合名 order by 键1

    for u in db.users.find().sort([("age", pymongodb.ASCENDING)]):

        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(sort = [("键1", pymongo.ASCENDING), ("键2“, pymongo.DESCENDING)]):

        print(u)

    # 组合写法

    for u in db.users.find({"name":"user9"}, sort = [('name', 1), ('sex', 1)], field = ["name", "age", "sex"]):

        print(u)

    # select * from 集合名 skip 2 limit 3

    for u in db.useres.find().skip(2).limit(3):

        print(u)

    # 可以用切片代替 skip & limit (mongo 中的 $slice 貌似有点问题)。

    for u in db.users.find()[2:5]:

        print(u)

    # select * from users where name = 'user3' and age > 12 and age < 15

    for u in db.users.find({'age':{'$gt':12, '$lt':15}, 'name':'user3'}):

        print(u)

    # select * from users where age in (23, 26, 32)

    for u in db.users.find({"age":{"$in":(23, 26, 32)}}):

        print(u)

 # select count(*) from users

    count = db.users.find({"age":{"$gt":30}}).count()

    # select * from 集合名 where 键1 = 值1 or 键1 = 值2

    for u in db.users.find({"$or":[{"age":25}, {"age":28}]}):

        print(u)


6、是否存在(exists)

    db.users.find({'sex':{'$exists': True}})


7、正则表达式查询

    for u in db.users.find({"name": {"$regex": r"(?i)user[135]"}}, ["name"):

        print(u)


8、多级路径查询

    ocument 采取 JSON-like 这种层级结构,因此我们可以直接用嵌入(Embed)代替传统关系型数据库的关联引用(Reference)。
    MongoDB 支持以 "." 分割的 namespace 路径,条件表达式中的多级路径须用引号

例:

    u = db.users.find_one({"im.qq": 12346565})


9、操作

    (1) $all: 判断数组属性是否包含全部条件。注意和 $in 的区别。$in 是检查目标属性值是条件表达式中的一员,而 $all 则要求属性值包含全部条件元素。

    (2) $size: 匹配数组属性元素数量。

    (3) $type: 判断属性类型。

    (4) $not: 取反,表示返回条件不成立的文档。

    (5) $unset: 和 $set 相反,表示移除文档属性。

    (6) $push: 和 $ pushAll 都是向数组属性添加元素。# 好像两者没啥区别

    (7) $addToSet: 和 $push 类似,不过仅在该元素不存在时才添加 (Set 表示不重复元素集合)。

    (8) $each 添加多个元素用。

    (9) $pop: 移除数组属性的元素(按数组下标移除),$pull 按值移除,$pullAll 移除所有符合提交的元素。

    (10) $where: 用 JS 代码来代替有些丑陋的 $lt、$gt。MongoDB 内置了 Javascript Engine (SpiderMonkey)。可直接使用 JS Expression,甚至使用 JS Function 写更复杂的 Code Block。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值