配列のみを含むオブジェクトがあるとしましょう
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 は正常に挿入されますが、配列は配列ではなく、提供された値を持つ int 値になります。
それは既知のバグですか?とにかくその周りにありますか?
ティア
古い質問の参照ですが、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[]' をデシリアライズできません。