如何在PyMongo的find函数中添加自定义时间查询参数?
问题解答
这种查询方式不可行,主要存在两个问题:
语法错误:Python中
collection.find()的参数需要是合法字典,但你的代码直接将"$and": [...]作为参数传递,不符合Python语法规范,会直接抛出语法异常。冗余的
$and操作:针对同一个字段x的范围查询,MongoDB会自动将多个条件按逻辑与处理,不需要显式使用$and,显式写法反而增加不必要的复杂度。
正确的实现方式
方式一:简化的范围查询(推荐)
直接合并同一字段的多条件,代码更简洁高效:
def query_from_to(self, begin, end): # 指定x字段的范围,MongoDB自动处理逻辑与 cursor = self.collection.find({"x": {"$gte": begin, "$lte": end}}) # 将游标转为列表返回(根据业务需求选择是否转换) return list(cursor)
方式二:修复语法后的$and写法(仅作演示,不推荐)
如果一定要用$and,需将条件包裹在字典中:
def query_from_to(self, begin, end): # 用字典包裹$and条件,符合Python语法 query = {"$and": [{"x": {"$gte": begin}}, {"x": {"$lte": end}}]} cursor = self.collection.find(query) return list(cursor)
额外注意事项
- 确保
begin和end的类型与MongoDB中x字段的类型一致(比如同为datetime对象或时间戳),否则查询会返回空结果。 find()方法返回的是游标对象,需要遍历或转换为列表才能获取实际数据。
内容的提问来源于stack exchange,提问作者Malcolm Thompson
相关产品推荐
相关产品推荐

