在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文档过滤查询的关键方法。从等值匹配到正则表达式,都能帮你实现多种查询需求。