在MongoDB中,当我们要查询集合内的数据时,可以使用find()方法并传入一个“查询对象(query object)”来筛选所需文档。本文将演示从最基础的等值过滤,到更复杂的比较运算符和正则表达式查询方式。
1. 基础过滤:等值匹配
如果想获取address字段等于"Park Lane 38"的文档,可以构造一个简单的查询对象:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "address": "Park Lane 38" } # 等于筛选条件
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
这样就只返回集合中address为"Park Lane 38"的文档。
2. 使用比较运算符 ($gt, $lt 等)
MongoDB提供了很多修饰符可实现更灵活的查询,比如 $gt(大于)、$lt(小于)等:
# 查找 address 字段值从字母 S 开头或更高的记录
myquery = { "address": { "$gt": "S" } }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
$gt: 大于 (Greater Than)$gte: 大于或等于$lt: 小于$lte: 小于或等于
3. 使用正则表达式 ($regex)
当我们想基于模式匹配字符时,可采用正则表达式。以下例子仅返回address以“S”开头的文档:
myquery = { "address": { "$regex": "^S" } }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
^表示匹配字符串开头为 “S”。
提示和注意
- 你可以将多个条件写进同一个查询字典里,如
{ "name": "John", "address": { "$regex": "^S" } }。 regex查询只能针对文本字段,数值型字段需要使用比较运算符。- 查询对象支持多样化修饰符,包括
$in、$ne等,可充分发挥MongoDB的灵活性。
通过以上示例,你已掌握了在Python中使用PyMongo进行MongoDB文档过滤查询的关键方法。从等值匹配到正则表达式,都能帮你实现多种查询需求。