美文网首页
Pymongo一些常见需求(陆续补充)

Pymongo一些常见需求(陆续补充)

作者: 米洛丶 | 来源:发表于2017-05-23 10:54 被阅读0次

    总结一下最近包括之前遇到的一些pymongo操作的问题。

    需求1: 搜索文档数组里边是否存在某元素


    数据:

    data1 = {
        '_id': xxxxxxxxxxxxxx,
        'dataList': [
        'apple',  'grape', 'banana'
    ]
    }
    data2 = {
        '_id': xxxxxxxxxxxxxx,
        'dataList': [
        'watermelon',  'mango'
    ]
    }
    

    关键字: $elemMatch

    查询方法:

    db.find({'$elemMatch': {'dataList': 'mango'}})
    
    

    这样就可以找到水果数据列表里边mango所在的document了。

    需求2: 删除文档的某个字段的某些信息


    数据:

    data = {
        '_id': "xxxxxxxx"
        'userInfo': {"name": "Woody", "age": 24, "weight": 10}
    }
    

    现在我想删除userInfo里边的weight信息。

    关键字: $unset

    db.update({'_id': 'xxxxxxxx'}, {'$unset': {'userInfo.weight': 10}})
    

    这样就可以删除掉userInfo里边的weight信息了,补充一点,userInfo和weight之间的连接用“.”来表示。

    需求3: 更新一条数据,如果数据不存在则插入此数据


    关键字: upsert参数置为True

    在update, update_one, update_many里边都包含这个参数,现在贴一下源码。

    Paste_Image.png Paste_Image.png

    可以看到源码里的解释是,如果upsert参数为True,则会在没有找到文档的时候插入这条数据(此时是可以代替insert操作的)。

    需求4: 使用正则表达式查询文档里的文本


    关键字: $regex

    data = {
        '_id': "xxxxxxxx",
        'content': 'hello, this is a url for baidu, it is https://www.baidu.com'
    }
    db.find({"content": {"$regex": r"https://[\w\.]+"}})
    
    

    需求5: 过滤不需要的字段


    关键字: projection参数

    例如我想过滤掉id,我只要content和name字段

    data = {
        '_id': "xxxxxxxx",
        'content': 'hello, this is a url for baidu, it is https://www.baidu.com',
        'name': '百度首页'
    }
    db.find({"content": {"$regex": r"https://[\w\.]+"}}, projection={'_id':0, 'name':1, 'content':1})
    
    
    

    需求6:在不知道字段名的时候查询

    关键字: text参数

    数据如下:

    { 
        "_id" : ObjectId("59a7aad34680b11dfcdfedba"), 
        "name" : "司导登出功能", 
        "location" : {
            "弹窗内容" : {
                "method" : "ID", 
                "value" : "net.yitu8.drivier:id/dialog_tips_content_msg", 
                "index" : null, 
                "text" : "确定退出登录?"
            },
            "我的-设置按钮" : {
                "method" : "ID", 
                "value" : "net.yitu8.drivier:id/img_manage_setting", 
                "index" : null, 
                "text" : null
            }
    }
    

    可以看到location字段里的key都是不确定的, 而我需要获取==value==为==net.yitu8.drivier:id/img_manage_setting==的数据document

    先看下官网的介绍~

    image

    search: 需要搜索的文本内容, string类型

    language: 语言, 我没填

    caseSenstive: true/false 是否大小写敏感

    disariticSensitive: 我也没填,具体也没看是干啥的

    ==注意: ==需要给text加上索引

    类似于这种, 可以用客户端MongoChef添加


    image

    具体用法:

    db.find({"$text": {
        "$search": "net.yitu8.drivier:id/img_manage_setting",
        "caseSensitive": True
        
        
    })
    
    

    相关文章

      网友评论

          本文标题:Pymongo一些常见需求(陆续补充)

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