在mongodb附近的建筑学与文件和子文件

时间:2011-06-21 11:39:23

标签: c# mongodb

我有一个管理C#设置的应用程序。所以我有一个看起来像的文件:

{
    ApplicationName: "FooApplication",
    Settings : [
          ConnectionString: "localhost@myserver.com",
          UserName: "Admin"
          Password: "Password"
        ]
    }
}
{
    ApplicationName: "BarApplication",
    Settings : [
          ConnectionString: "localhost@myserver.com",
          UserName: "Admin",
          Password: "Password",
          Special: "aaaaaaaaaaaaaa"
        ]
    }
}

正如您所看到的,我的应用程序FooApplication和BarApplication都使用相同的设置,但我的BarApplication还有一个特殊的设置:“aaaaaaa”。

当天,我的ConnectionString成为NewLocalhost@myserver.com,是否是对每个Application文档的ConnectionString字段进行更新的好方法?实际上我不知道在我的情况下最好的做法是什么,因为我是使用像mongodb这样的NoSQL解决方案的新手。

第二件事,我想插入一个新的应用程序,我想总是插入一些设置,如ConnectionString,UserName和Password,因为它对每个应用程序都是相同的,但我在哪里可以得到这个常见的设置?使用名为GlobalSettings的新集合,我存储常用设置?或者例如,我选择applicationName FooApplication,获取其公共字段的值,然后将其复制到我想创建的新应用程序SuperApplication中?

任何建议都会受到赞赏。

谢谢你们。

1 个答案:

答案 0 :(得分:1)

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

其次,让我们澄清术语。

  • 一个集合就是它的声音 - 一组文档。它类似于表格。
  • 文档本质上是集合中的记录。

您最想要的是包含大量设置文档的设置集合,而不是包含所有设置的单个文档。

您应该创建一个包含您的属性的POCO

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

现在您可以创建一个可以插入集合的ApplicationSettings实例。

您可以按ID(默认情况下mongo已经开启了索引)或应用程序名称进行查询。

如果要进行更新,可以通过ID或名称查询来更新单个文档,也可以一次更新所有文档。

假设您使用的是官方C#驱动程序,它看起来像这样:

更新单个文档

var query = Query.EQ("_id", someIdHere);
var update = Update.Set("Settings.ConnectionString", "NewLocalhost@myserver.com")
collection.Update(query, update)

(你的collection实例取决于你。)

查看文档以获取更多信息:http://www.mongodb.org/display/DOCS/CSharp+Language+Center