pymongo中的特殊查询

栏目: Python · 发布时间: 6年前

内容简介:可以使用正则(re)来查询也可以使用

可以使用正则(re)来查询

import re
from pymongo import Connection

name = r"^%s$"%filename
re_name = re.compile(name,re.I)
conn = Connection(host, port)
fileinfos = conn.fileRecode.fileTask.find({'filename':re_name},projection={'_id': False})

也可以使用 $regex 表达式,上面的代码可以使用下面替换

fileinfos = conn.fileRecode.fileTask.find({'filename':{'$regex':r"^%s$"%filename,'$options':"i"}},projection={'_id': False})

$options 目前支持四种,比较常用的是 i

选项 含义 使用要求
i 大小写不敏感
m 查询匹配中使用了锚,例如^(代表开头)和$(代表结尾),以及匹配\n后的字符串
x 忽视所有空白字符 要求$regex与$option合用
s 允许点字符(.)匹配所有的字符,包括换行符。 要求$regex与$option合用

#字段的多层结构查询

比如有如下格式的数据

/* 1 */
{
    "_id" : ObjectId("5c24a27ddb1f5a209cf8799a"),
    "info" : {
        "age" : "30",
        "name" : "yangyanxing"
    },
    "id" : 1
}

/* 2 */
{
    "_id" : ObjectId("5c24a2acdb1f5a209cf8799b"),
    "info" : {
        "age" : "20",
        "name" : "fanjy"
    },
    "id" : 1
}

比如我要查询info下的name为yangyanxing的该如何查询呢?

使用 . 来连接查询,这里就是 info.name

>>> conn.yang.test.find_one({"info.name":"fanjy"})
{u'info': {u'age': u'20', u'name': u'fanjy'}, u'_id': ObjectId('5c24a2acdb1f5a209cf8799b'), u'id': 1}

查询指定时间段的数据

有时候在插入数据的时候会使用 datetime.datetime.now() 来插入一个datatime格式的数据,比如要查询某段时间的数据该怎么查询呢?

可以使用 $gte (大于等于)与 $lte (小于等于)来查询,比如说要查询一年以来的数据,可以这样

import datedate
from pymongo import Connection

start_check = datetime.datetime.now()-datetime.timedelta(days=365)
checkCon = {'addtime':{"$gte":start_check}}
conn = Connection(host, port)
fileinfos = conn.Documents.find(checkCon)

#逻辑关系查询

一般的逻辑查询包括 与 或 非

  1. 关系 (and)

    其实这个不要特殊的关键词,直接将要查询的内容依次写到查询条件中就是 的关系

    >>> conn.yang.test.find_one({"info.name":"fanjy","id":1})
    {u'info': {u'age': u'20', u'name': u'fanjy'}, u'_id': ObjectId('5c24a2acdb1f5a209cf8799b'), u'id': 1}
    
  2. 关系 (or) 需要使用 $or ,比如要查询名字叫 yangyanxing 或者 地址在tongzhou的

coon.yang.test.find({"$or":[{"name":"yangyanxing"},{"address":"tongzhou"}]})

$or 的值为一个列表,列表中的每一项是一个字典,字典中是各种查询条件。

列表也可以用列表迭代,比如我要找到 taskid 为1,2,4,6,7,9,10,20,34的任务,可以使用

conn.yang.test.find({'$or':[{"taskid":i} for i in l]})
  1. $in 操作
    >>> for i in conn.yang.test.find({"info.name":{"$in":['yangyanxing','fanjy']}}):
    ...     print i
    ...
    {u'info': {u'age': u'30', u'name': u'yangyanxing'}, u'_id': ObjectId('5c24a27ddb1f5a209cf8799a'), u'id': 1}
    {u'info': {u'age': u'20', u'name': u'fanjy'}, u'_id': ObjectId('5c24a2acdb1f5a209cf8799b'), u'id': 1}
    >>> for i in conn.yang.test.find({"info.name":{"$in":['yangyanxing','xxxxx']}}):
    ...     print i
    ...
    {u'info': {u'age': u'30', u'name': u'yangyanxing'}, u'_id': ObjectId('5c24a27ddb1f5a209cf8799a'), u'id': 1}
    

参考文章

3分钟掌握 MongoDB 中的regex几种用法

以上所述就是小编给大家介绍的《pymongo中的特殊查询》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax Design Patterns

Ajax Design Patterns

Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99

Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具