Обновление числовых типов с использованием NoRM и других инструментов изменяет метаданные числового типа в MongoDb - PullRequest
2 голосов
/ 21 января 2011

Мы используем драйвер 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 не может получить объект.

Поэтому нам нужно как-то указать метаданные числового типа в запросе на обновление, но мы не нашли способа сделать это.

1 Ответ

2 голосов
/ 24 января 2011

Мы экспериментировали с той же проблемой. Из-за этого и многих других раздражающих факторов рассмотрите возможность использования драйвера 10gen (из-за того, что драйвер NoRM прекращает работу)

http://groups.google.com/group/norm-mongodb/browse_thread/thread/2e44f73b2beaa984

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...