.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
相关产品推荐
相关产品推荐

