我对面向文档的数据库很感兴趣,我想和MongoDB一起玩.所以我开始了一个相当简单的项目(一个问题跟踪器),但我很难以非关系的方式思考.
我的问题:
我有两个彼此相关的对象(例如issue = {code:"asdf-11", title:"asdf", reporter:{username:"qwer", role:"manager"}}- 这里我有一个与问题相关的用户).我应该创建另一个文档"user"并通过其id(如关系数据库)在"issue"文档中引用它,还是应该将所有用户的数据保留在子文档中?
如果我在文档中有对象(子文档),我可以在一个查询中更新它们吗?
为了给这个问题提供更多的上下文,我有一个Web应用程序(asp mvc),它基本上将CRUD操作包装到MongoDb实例,它在模型被验证并发送到存储之前执行验证和某些业务逻辑,检索等
现在我们遇到的一个问题是,在新版本中,模型已经改变,但现有数据没有,这里是一个例子:(它是c#特定的,但问题确实是语言不可知的)
public class Person
{
public Guid Id {get; set;}
public string Name {get; set;}
public int Age {get;set;}
public string BadgeNo {get;set;}
}
public class Person
{
public Guid Id {get; set;}
public string Name {get; set;}
public int Age {get;set;}
public string EmployeeNo {get; set;} // Still contains same data as BadgeNo just called something different
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,对象的结构发生了变化,但是在Mongo的土地上,它仍然传递出一个BadgeNo,而不是一个EmployeeNo.在SQL领域,我们通常会有一个迁移脚本,它作为构建脚本的一部分运行,它将更改架构并更新/插入/删除该增量的任何其他数据.
那么如何用Mongo 管理这类迁移呢?我是否还应该使用一个脚本来更新Mongo中的所有实例?还是有一些其他首选的做法来做这种事情.
关于这个问题的任何建议都会很棒
===编辑===
目前我似乎想要使用迁移选项而不是逐步淘汰方法,所以考虑到这一点,任何人都可以推荐任何帮助这一领域的工具,否则每次迁移(假设滚入,推出) )必须是一个具有所有逻辑的预编译程序集.我正在思考FluentMigrator的内容,但不是使用SQL而是使用Mongo.目前我的构建脚本使用Nant,我看过一些ruby工具,但不确定是否有任何.net等价物.