Мы используем драйвер NoRM C # для хранения классов нашего домена на mongodb. Проблема, с которой мы сталкиваемся, касается внешних обновлений в этой базе данных. При попытке обновить существующую сущность домена, созданную изначально с использованием NoRM, с использованием внешнего инструмента, такого как оболочка mongo или MongoVUE, числовые значения сохраняются как разные числовые типы. Т.е. сущности домена, содержащие значения полей Int32, обновляются как integer64 (MongoVUE) или float64 (оболочка mongo).
Оригинальный объект C #:
Class Person
{
public string Name {get; set;}
public int Age {get; set;}
}
Исходный объект, созданный с использованием NoRM:
{ Name: 'John Smith', Age: 16 } // On MongoVUE Age field is shown as Int32
Обновленный объект, использующий MongoVUE:
db.Test.update({Age:16}, {$set:{Age:22}})
{ Name: 'John Smith', Age: 22 } // On MongoVUE Age field is shown as Int16
Обновление объекта с использованием оболочки Mongo:
db.Test.update({Age:22}, {$set:{Age:32}})
{ Name: 'John Smith', Age: 32 } // On MongoVUE Age field is shown as Float64
Когда мы пытаемся получить обновленный объект, используя NoRM, в зависимости от инструмента, использованного для выполнения обновления, NoRM не может получить объект.
Поэтому нам нужно как-то указать метаданные числового типа в запросе на обновление, но мы не нашли способа сделать это.