美文网首页我爱编程
Mongodb部分小结

Mongodb部分小结

作者: 清晨起床敲代码 | 来源:发表于2018-07-26 11:46 被阅读0次

    前言:近期使用mongodb的频率比较高,其中遇见一些坑,作此总结!本人mongo为3.4版本。

    首先触雷多次的是mongo对象的遍历问题,之前使用过程中没有发现这个问题。


    mongo对象只可遍历一次!

    帅帅跟我说要想多次遍历就先转为数组,嗯,是个好方法!

    然后就是一些小的技巧和小代码:

    索引及中文排序

    建立索引

    如果没有对应的数据库,会自定创建,索引可加快查询速度:

    a,mongodb新建collection 包含索引,且中文排序(在创建数据库时使用)
       db.dbname.createIndex({name: 1}, {collation: {locale: "zh"}})
    

    注:name字段加索引,1为正向,-1为反向。

    b,查询时按中文拼音排序
    db.dbname.find({"查询条件"}).collation({'locale':'zh'}).sort([("attr_name1", 1), ('attr_name2', 1)])
    

    其他:
    1,查询array中包含某键值对的对象:
    {
        "_id" : ObjectId("xxxxxxxx"),
        "name" : "ccc",
        "room_items" : [ 
            {
                "room_ref" : "aaa",
                "room_name" : "shuaishuai"
            }, 
            {
                "room_ref" : "bbb",
                "room_name" : "room_name"
            }
        ]
    }
    

    查询room_items数组中包含"room_name": "shuaishuai"的所有对象:

    db.dbname.find({"room_items":{$elemMatch: { "room_name": "shuaishuai"}}})
    
    2,查询mongo对象中存在某数组的对象:
    db.dbanme.find({"_id": ObjectId("xxxxxxx"), "room_items": {"$exists": True}})
    

    注:True 为存在,False为不存在(python 的true false 首字母大写)

    3,将字典对象添加到array:
    room_ob = {"name":"room1","ref":"xxxx"}
    db.dbname.update({"_id": ObjectId("")}, {"$addToSet": {"room_items": room_ob}})
    

    注:$addToSet 重复不添加(如果多个键值对相同但顺序不同,会认为是不同字典,这是一个坑)

    4,更新数组中某个字典对象的部分值:
    db.userinfo.update(
    {
      "_id" : ObjectId("xxxxxx"),
      "room_items": { "$elemMatch": { "room_ref": "aaa" } } },
    { "$set": { "room_items.$.room_type" : 6, "room_items.$.room_name":"room1" } 
    })
    

    注:修改room_items数组中“room_ref”为"aaa"的对象的“room_type”及“room_name”值

    5,删除数组中的内嵌字典文档
    db.dbname.update({"_id": ObjectId(xxxx)},{"$pull":{"room_items":{"room_name": room1}}}
    

    小结:目前使用的值得记录的大概这么多,以后再追加!

    6,对正则的支持
    db.common.find({"name":{"$regex": '^%s' % "ab" }})
    等同
    commons = Common.objects.raw({"name":{"$regex": '^%s' % "ab" }})

    相关文章

      网友评论

        本文标题:Mongodb部分小结

        本文链接:https://www.haomeiwen.com/subject/wjgvmftx.html