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

.NET下MongoDB聚合Project操作报JSON reader was expecting a value错误

.NET操作MongoDB执行投影查询报错的原因与解决方案

报错原因

MongoDB .NET驱动的Project<T>()方法不支持直接传入原生JSON字符串作为投影参数,该方法合法的入参类型为ProjectionDefinition、BsonDocument或者Lambda表达式。你直接传入拼接好的JSON字符串时,驱动的内部JSON解析器无法将字符串识别为合法的投影结构,因此抛出JSON reader was expecting a value but found 'string'错误。

解决方法

有两种可行的修复方案,推荐优先使用第二种:

  • 方案1:将生成的JSON字符串转为BsonDocument后传入
    仅需修改查询代码中的Project调用行,提前解析字符串为BsonDocument即可:
    // 需要先引入命名空间 using MongoDB.Bson;
    var result = _mongoDbRepository
            .SetDatabase("mydatabase")
            .GetCollection(myCollection)
            .Aggregate()
            .Match(myFilter)
            .Project<dynamic>(BsonDocument.Parse(projects))
            .ToList();
    
  • 方案2:使用官方提供的投影构建器生成规则(更安全)
    完全不需要手动拼接JSON字符串,直接用驱动自带的投影构造器生成规则,既避免语法错误,也能兼容包含特殊字符的字段名:
    // 替换原有的GenerateProject调用逻辑
    var projectionBuilder = Builders<BsonDocument>.Projection;
    var projection = projectionBuilder.Exclude("_id");
    foreach (var item in customizations)
    {
        projection = projection.Include(item.Name);
    }
    
    var result = _mongoDbRepository
            .SetDatabase("mydatabase")
            .GetCollection<BsonDocument>(myCollection)
            .Aggregate()
            .Match(myFilter)
            .Project<dynamic>(projection)
            .ToList();
    

内容的提问来源于stack exchange,提问作者Desalex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:04