内容简介:可以使用正则(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)
#逻辑关系查询
一般的逻辑查询包括 与 或 非
-
关系
与
(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}
-
关系
或
(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]})
-
$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}
以上所述就是小编给大家介绍的《pymongo中的特殊查询》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Mybatis关联查询(嵌套查询)
- MySQL高级查询---连接查询实例
- Oracle子查询相关内容(包含TOP-N查询和分页查询)
- Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
- 打造出色查询:如何优化SQL查询?
- SQL优化-慢查询+explain查询
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!