Допустим, у меня есть объект, который содержит только массивC# MongoDB upsert с позиционной оператора выдает
public class A
{
[BsonId]
public ObjectId Id;
public int[] arr;
public A()
{
arr = new [5];
}
}
, когда я хочу, чтобы обновить определенный индекс в массиве с помощью Id,
и не мог Id Не будет найден. Я хочу вставить новый объект в db, и когда он вставлен
Предположим, что этот предоставленный Идентификатор и 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 значение с значением параметра, вместо массива.
Это известная ошибка? все равно вокруг?
ТИА
Refrence для старого вопроса, но это было 2 года назад: here
EDIT
Im регистрации обр с умолчанию вальса:
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;}
и Im получение:
Произошла ошибка при десериализации обр свойство класса DatabaseManager.MongoEntities.A: Не удается десериализации 'ИНТ []' из 'Документ' BsonType.
Я предполагаю, что если в массиве нет 5 элементов, то заполняются только те, которые присутствуют, и любые избытки игнорируются? – BanksySan