也许我期待MongoDb过多,或者我还没有掌握Nosql数据库中的关系概念.
基本上,以下测试失败,我想知道如何模拟用户和组之间的这种关系(这是1:0..N关系).
[TestFixture]public class MongoDbExamples{ private MongoServer _mongoServer; [TestFixturesetUp] public voID FixturesetUp() { _mongoServer = MongoServer.Create(); } [TestFixtureTearDown] public voID FixtureTearDown() { _mongoServer.disconnect(); } [Test] public voID Relationtest() { var database = _mongoServer.GetDatabase("StackoverflowExamples"); var p = new Person() { name = "Testperson" }; var persons = database.GetCollection<Person>("Persons"); persons.Save<Person>(p); var group = new Group() { Description = "A fancy descriptor" }; group.Add(p); var groups = database.GetCollection<Group>("Groups"); groups.Save<Group>(group); var readPerson = persons.FindOneByID(p.ID); readPerson.name = "a different name"; // since the ID hasn't change this is an update of the original person: persons.Insert<Person>(readPerson); // and I thought that it should be reflected in the group as well: var readGroup = groups.FindOneByID(group.ID); Assert.AreEqual(readPerson.ID,readGroup.persons[0].ID); // this passes,the ID is the same Assert.AreEqual(readPerson.name,readGroup.persons[0].name); // this fails,the groups person still has the old name }}
这种关系有最佳实践吗?例如.是否应该搜索所有收藏/文件中的所有人并与人员收藏的匹配人交换那些人?或者是Nosql数据库不擅长的关系,我应该避免关系(我想知道如何在更大的系统中使用Nosql-DB然后使用更复杂的对象图)?
解决方法 没有相关集合的关系或自动更新之类的东西.好像你希望mongo表现得像ORM,但这不是它的作用,至少不是C#驱动程序.如果要保存人员和组,则必须单独保存.您应该仅存储人员ID,而不是将完整的人物对象存储在组对象中.然后使用这些ID在需要人员数据时查找此人.
另外,您可能想阅读dbref上的文档.
http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef
总结以上是内存溢出为你收集整理的c# – NoSQL世界中的唯一性是什么意思,我如何处理MongoDB中的关系?全部内容,希望文章能够帮你解决c# – NoSQL世界中的唯一性是什么意思,我如何处理MongoDB中的关系?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)