首页 > 解决方案 > 当模型是具体类型并且现在是接口时如何进行 mongoDB 迁移

问题描述

我正在使用 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 驱动程序会保存一个名为“_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 反序列化的对象的实际类型。

有人知道我做错了什么?

标签: c#mongodbmongodb-.net-driver

解决方案


推荐阅读