MongoDB C# Driver添加子对象报错:无法将List<Child>转为Child
问题原因与解决方法
错误根源
你代码里的问题出在AddToSet的泛型参数和传参类型不匹配:
AddToSet<IEnumerable<Child>>指定泛型为集合类型,但AddToSet方法的作用是向数组中添加单个元素,无论你传入的Child是单个对象还是集合,都会触发类型转换错误。
正确写法
1. 添加单个Child对象
将泛型参数改为Child,直接传入单个Child实例:
var builder = Builders<parent>.Filter; var filter = builder.Eq("_id", "123"); // 泛型参数改为Child,传入单个Child对象 var update = Builders<parent>.Update.AddToSet<Child>("Child", singleChildInstance); await _expensesContext.collection.UpdateOneAsync(filter, update);
2. 添加多个Child对象
如果要一次性添加多个子对象,改用AddToSetEach方法:
var builder = Builders<parent>.Filter; var filter = builder.Eq("_id", "123"); // 传入Child集合,批量添加元素到数组 var update = Builders<parent>.Update.AddToSetEach("Child", childList); await _expensesContext.collection.UpdateOneAsync(filter, update);
额外提示
检查文档结构中的_Id是大写I,而代码过滤条件用的是"_id"(小写i),确保MongoDB字段名和代码中的过滤键一致,避免出现找不到目标文档的问题。
内容的提问来源于stack exchange,提问作者Mer Merced
相关产品推荐
相关产品推荐

