我有一个管理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中?
任何建议都会受到赞赏。
谢谢你们。
答案 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