2011-06-21 171 views
2

我有一个管理C#设置的应用程序。所以我有一个文件,它看起来像:有关文档和子文档的mongodb的体系结构

{ 
    ApplicationName: "FooApplication", 
    Settings : [ 
      ConnectionString: "[email protected]", 
      UserName: "Admin" 
      Password: "Password" 
     ] 
    } 
} 
{ 
    ApplicationName: "BarApplication", 
    Settings : [ 
      ConnectionString: "[email protected]", 
      UserName: "Admin", 
      Password: "Password", 
      Special: "aaaaaaaaaaaaaa" 
     ] 
    } 
} 

正如你可以看到我的两个应用FooApplication和BarApplication使用相同的设置,除了我的BarApplication多了一个设置,这是特殊的:“AAAAAAA”。

当天,我的ConnectionString成为[email protected],它是更新每个应用程序文档的ConnectionString字段的好方法吗?其实我不知道我的情况是什么,因为我是使用MongoDB等NoSQL解决方案的新手。第二件事,我想插入一个新的应用程序,我想总是插入一些设置,如ConnectionString,UserName和Password,因为它对每个应用程序都是一样的,但是我在哪里可以获得这个通用设置?有一个名为GlobalSettings的新集合,用于存储常用设置?或者例如,我是否选择applicationName FooApplication,获取其公共字段的值,然后将其复制到我想要创建的新应用程序SuperApplication中?

任何意见将不胜感激。

谢谢你们。

+0

为什么你保存在同一文件中的所有连接? –

+0

因为查询我的应用程序文档列表及其设置并将其显示在我的树视图中会更容易。如果我有两个集合,我不得不在Application集合和Setting集合之间使用某种连接。 – Gui

+0

我说过“同一文件”,而不是“同一个文件集”。 –

回答

1

首先,大多数NoSql商店的最佳实践与RDBMS商店的最佳实践类似。

其次,让我们澄清术语。

  • 集合就是它听起来像 - 一个文件集合。它类似于一张桌子。
  • 文档本质上是集合中的记录。

你最想要的是一组设置文件的集合,而不是包含所有设置的单个文档。

你应该创建一个包含属性

public class ApplicationSettings { 
    public ObjectId Id {get; set;} 
    public string Name {get; set;} 
    public Dictionary<string, string> Settings {get; set;} 
} 

现在你可以创建一个可以插入到集合中的ApplicationSettings实例的POCO。

您可以通过id(默认情况下,mongo已经有一个索引)或应用程序名称进行查询。

当您想要进行更新时,您可以通过按ID或名称查询来更新单个文档,或者您可以一次更新所有文档。

假设你使用的是官方的C#的驱动程序,它会是这个样子:

更新单个文档

var query = Query.EQ("_id", someIdHere); 
var update = Update.Set("Settings.ConnectionString", "[email protected]") 
collection.Update(query, update) 

(你从哪儿得到您的collection实例是由你。)

退房文档的详细信息:http://www.mongodb.org/display/DOCS/CSharp+Language+Center

+0

非常感谢你的回答。 – Gui