Я использую драйвер MongoDB C # версии 2.4.4.
У меня проблемы с переносом старых документов, которые были основаны в конкретном типе, в новую модель, основанную на интерфейсе.
В начале модель была примерно такой:
public class DeliveryRoute : MongoDbItem
{
...
public List<Step> Steps { get; set; }
...
}
Теперь мне нужно было воспользоваться интерфейсом, и новый код выглядит так:
public class DeliveryRoute : MongoDbItem
{
...
public List<IStep> Steps { get; set; }
...
}
Когда я сохраняю новые документы,MongoDB Driver сохраняет поле с именем "_t", которое содержит конкретный тип.
Проблема в том, что у меня уже есть некоторые документы, которые не имеютэто поле.Я думал, что решение было простым, затем я создал этот скрипт, чтобы добавить новое поле для каждой имеющейся у меня коллекции:
db.getCollection('MongoDBDeliveryRouteCollection').find({"UnitCode":"016302", "_id":"01630220181030013818"})
.forEach(function(deliveryRouteDocument){
deliveryRouteDocument.Steps.forEach(function(step){
if(!step.hasOwnProperty('_t')){
step._t = "Step";
}
});
db.getCollection('MongoDBDeliveryRouteCollection').save(deliveryRouteDocument);
})
Поле было создано.
Но кажется, что драйверигнорирование "_t" при его создании скриптом.В результате возникает ошибка:
Невозможно определить фактический тип объекта для десериализации для типа интерфейса PathTracker.Common.Interfaces.IStep.
Кто-то имеет представление о том, что яделать неправильно?