如何在mongodb中添加新字段,如果我使用norm或csharp-mongodb驱动程序
问题描述:
我有两个基于mongodb数据库的项目。一个项目使用csharp-mongodb和另一个 - 常规驱动程序。如何在mongodb中添加新字段,如果我使用norm或csharp-mongodb驱动程序
我只使用像GetCollection这样的通用方法向我的数据库发出请求。 如何添加新的领域与我的实体较少痛苦?
例如, 在开始的时候,我有
public class MyEntity
{
public int _id {get;set;}
public string Firstname {get;set;}
}
几天我决定增加新的领域
public class MyEntity
{
public int _id {get;set;}
public string Firstname {get;set;}
public string Lastname {get;set;} //here is
}
我看只有一个办法
- 使工具,它让我的实体,然后反序列化它并转换为新类型,然后序列化为bson。至于我 - 这是困难的方式 - 了解到我有超过100万条记录。
我知道CSHARP MongoDB的驱动程序有documnets :)
答
如果您使用Norm驱动程序,插入和检索时会自动更新新添加的字段。您不必进行手动反序列化。
当retieveing时,新字段的姓氏将返回为空的旧文件。插入时,这个新字段将被添加到文档中。
答
@Antony工作的能力,你需要的时候你得到新的领域,以更新的所有记录?尝试选择延迟更新 - 更新请求中的每个旧记录。但是所有新式记录都会有所有记录字段。我喜欢samus driver。当然它适用于BSON文档,但是当你想更新一些记录时,MongoDB会返回完整的BSON文档,而不是部分。我是MongoDB中的新成员,但据我了解,MongoDB无法返回文档的某个部分。它可以像你的工具一样工作:get - >反序列化 - > update - > serialize - > save;当我们谈论1M-10M记录时,我认为这并不难;)
的MongoDB可以返回一些对象的一部分,这里是链接:http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields我不知道它是如何实现的CSHARP -mongodb驱动程序(我不需要在我的应用程序中执行此操作)。我的问题是:我有大约100 000个类型为MyEntity的记录,然后我在类中添加新字段,然后我无法将旧类型反序列化为新类型(运行时错误)。我认为这将是很酷,如果mongo驱动程序可以初始化该值的默认值,即默认(T) – 2010-12-05 15:54:49
@Antony,关于子领域的好的细节;) – Edward83 2010-12-05 16:12:45