You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:45:14