LINQ转MongoDB查询翻译异常问题求教
MongoDB.Driver LINQ提供程序转换表达式时生成无效聚合查询导致异常
环境:.NET 6.0,使用NuGet的MongoDB.Driver 2.22.0版本。
我正在开发一个将LINQ表达式转换为MongoDB查询的项目,遇到了以下问题:
使用的LINQ表达式
.Take(25) .Where(x => ( (x.Cpf == "...") && (x.FirstName == "Rodrigo") && ( x.Surnames.Any(x => (x == "Jacques") || (x == "Amanda") ) && (x.Surnames.Count() > 1) ) ) )
转换后的MongoDB聚合查询
[ { "$limit": NumberLong(25) }, { "$match": { "$and": [ { "Cpf": "..." }, { "FirstName": "Rodrigo" }, { "Surnames": { "$elemMatch": { "$or": [ { "$eq": "Jacques" }, { "$eq": "Amanda" } ] } } }, { "$expr": { "$gt": [ { "$size": "$Surnames" }, 1 ] } } ] } } ]
执行时的异常信息
MongoCommandException: Command aggregate failed: unknown top level operator: $eq. If you have a field name that starts with a '$' symbol, consider using $getField or $setField.
该LINQ表达式是在Web应用的自定义语言合成阶段生成的,能正常编译且在其他IEnumerable<T>类型中工作正常,说明LINQ表达式本身是准确的,创建最终Expression时也处理了ExpressionParameter引用等细节。
请问这是MongoDB LINQ提供程序的已知限制或bug,还是MongoDB不支持该查询的某些特性?希望得到相关指导或见解。
我的预期是转换后的查询能正常执行无错误,LINQ提供程序能将表达式准确转换为有效的MongoDB查询。
内容的提问来源于stack exchange,提问作者Jacques
相关产品推荐
相关产品推荐

