Python+MongoDB:如何使用查询对象过滤文档

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