Python mongo aggregate match expr不起作用,但expr似乎没问题

Python mongo aggregate match expr不起作用,但expr似乎没问题,python,mongodb-query,mongo-shell,Python,Mongodb Query,Mongo Shell,我有一个Mongo集合,我正在使用$expr中自制的substr匹配从数组中搜索子文档的展开列表,如下所示 {“$expr”:{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$ok_name”}”,be“]},-1]} 有趣的是,$match中$expr的$name从不匹配,因为会给出零结果,但是$projection中相同的$expr会给出预期的结果(true和false值) 更有趣的是,同样的$expr对于其他字段,例如来自同一子文档的ok\u name,也可以正常工

我有一个Mongo集合,我正在使用$expr中自制的substr匹配从数组中搜索子文档的展开列表,如下所示
{“$expr”:{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$ok_name”}”,be“]},-1]}

有趣的是,
$match
$expr
$name
从不匹配,因为会给出零结果,但是
$projection
中相同的$expr会给出预期的结果(
true
false
值)

更有趣的是,同样的
$expr
对于其他字段,例如来自同一子文档的
ok\u name
,也可以正常工作

其他$expr也可以正常工作,请参见
a\u date

整个命令看起来有点像这样,为了清晰起见,这里缺少一些部分:

db.getCollection('foo').aggregate([
{“$match”:{“mergedAt”:{“$exists”:true}},
{“$unwind”:{“path”:“$bar”,“INCLUDEARYINDEX”:“arrayIndex”},
{“$match”:{
“$and”:[
{“$expr”:{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$ok_name”}”,be“]},-1]},
{“$expr”:{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$name”},“e”]},-1]},
{“日期”:{“$gte”:ISODate(“2020-03-01 00:00:00+00:00”)},
]
}
}, 
{“$addFields”:{“lastModified_doc”:“$lastModified”},
{“$replaceRoot”:{“newRoot”:{“$mergeObjects”:[“$$ROOT”,“$bar”]}},
//{“$unset”:[…]
}, 
{$项目:{
“名称”:1,
“my_expr”:{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$name”},“e”]},-1]}},
//{“$facet”:{[…]}
])
那么,为什么expr适用于某些字段而不适用于其他字段,但始终处于
$projection
阶段

我使用python motor/pymongo/SON和mongo shell(Robo3T)检查了类型(我在上面使用的所有东西都是字符串)、语句顺序(无关紧要)和mongo索引(无关紧要)以及不同类型的$expr(例如,“a_date”中的日期)


什么会导致每次匹配中带有indexOfCP的expr失败?

您误解了$expr的工作原理,$expr允许您在正常查询中使用聚合表达式。把它放在$match里面真的没有意义。只需尝试从$expr文档中取消对条件的测试,它就会工作。

我收到一个错误“未知顶级运算符:$gt”。/<代码>javascript{“$match”:{“$and”:[{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$kk_name”},“be”]},-1]},{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$name”},“e”},-1]},{“rechnung_数据”:{“$gte”:ISODate(“2020-01-02”)},}但也许我真的在考虑复杂化……在几次尝试和“未知顶级运算符:$gt”错误后,我发现有些东西可以工作。整个匹配可以是expr:
javascript{“$match”:{“$expr”:{“$and”:[{“$gte”:[“$rechnung_datum”,ISODate(“2020-01-02”)]},{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$kk_name”},“be”]},-1]},{“$gt”:[{“$indexOfCP”:[{“$toLower”:“$einzelnachweis.name”},“e”]},-1]},]},}
需要对查询进行一些重新排序,但似乎有效。稍后将检查…Thx以获取提示…这种方法看起来有点奇怪,但这是mongo…:/