能否在python-arango的集合过滤器中使用否定操作?
在python-arango的find方法中使用否定操作
当然可以!你完全能在find()的过滤器字典里用否定操作,底层调用的/_api/simple/by-example端点其实支持这类匹配规则,只是相关说明确实藏得比较深。下面给你具体讲讲用法:
1. 基础不等于匹配
要找某个字段不等于指定值的文档,只需要在字段名前加个!前缀就行:
# 查找所有foo字段不等于"bar"的文档 docs = collection.find({"!foo": "bar"})
2. 混合条件查询
你还能把否定条件和普通的相等条件组合起来用,比如:
# 筛选boolean字段为true,同时integer字段不等于42的文档 docs = collection.find({ "boolean": True, "!integer": 42 })
3. 替代写法(MongoDB风格)
如果你习惯MongoDB的操作符写法,by-example也支持$ne操作符,效果和前缀!完全一样:
docs = collection.find({"foo": {"$ne": "bar"}})
进阶提示
不过要注意,这种否定方式只适合简单的不等于判断。如果需要更复杂的否定逻辑(比如"不在某个列表里"、否定正则匹配),by-example的能力就有限了,这时候直接用AQL查询会更灵活:
# 用AQL实现"foo字段不在指定列表中"的否定查询 cursor = collection.aql.execute( "FOR doc IN your_collection FILTER doc.foo NOT IN ['bar', 'baz'] RETURN doc" ) target_docs = list(cursor)
内容的提问来源于stack exchange,提问作者kuza
相关产品推荐
相关产品推荐

