假设我有一个只包含一个数组的对象
public class A
{
[BsonId]
public ObjectId Id;
public int[] arr;
public A()
{
arr = new [5];
}
}
当我想通过 Id 更新数组中的某个索引时,
并且找不到 Id 我想将新对象插入到数据库中,并且在插入时
它假设在提供的索引上有这个提供的 Id 和一个带有提供值的 arr。
到目前为止一切顺利,但是,它没有发生。
//receiving ObjectId id, int input_index, int input_value
var filter = Builders<A>.Filter.Eq(x => x.Id, id);
var options = new UpdateOptions()
{
IsUpsert = true
};
var update = Builders<A>.Update.Set(x => x.arr[input_index], input_value);
//executing the query....
相反,Id 被插入 OK,但是数组变成了具有提供值的 int 值,而不是数组。
这是一个已知的错误吗?周围有吗?
TIA
对较旧问题的引用,但那是 2 年前: 这里
编辑
我使用默认值注册 arr:
if (!BsonClassMap.IsClassMapRegistered(typeof (A)))
{
BsonClassMap.RegisterClassMap<A>(map =>
{
map.AutoMap();
map.SetIgnoreExtraElements(true);
map.GetMemberMap(c => c.arr)
.SetDefaultValue(new int[5] {0, 0, 0, 0, 0});
});
}
还尝试添加标签而不是 registerMap:
[BsonDefaultValue(new int[5] {0, 0, 0, 0, 0})]
[BsonIgnoreIfDefault]
public int[] arr {set;get;}
我收到:
反序列化类 DatabaseManager.MongoEntities.A 的 arr 属性时出错:无法从 BsonType 'Document' 反序列化 'int[]'。