c# – NoSQL世界中的唯一性是什么意思,我如何处理MongoDB中的关
发布时间:2020-12-15 23:58:30 所属栏目:百科 来源:网络整理
导读:我目前正在试图弄清楚,Nosql数据库如何处理关系以及文档的唯一ID真正意味着什么. 也许我期待MongoDb过多,或者我还没有掌握NoSQL数据库中的关系概念. 基本上,以下测试失败,我想知道如何模拟用户和组之间的这种关系(这是1:0..N关系). [TestFixture]public cla
我目前正在试图弄清楚,Nosql数据库如何处理关系以及文档的唯一ID真正意味着什么.
也许我期待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#使用SQL依赖的长轮询与IIS不一致
- c – Google glog中的模块式详细日志记录
- 解决No grammar constraints (DTD or XML Schema) referenc
- xcode – 如何使用冒号在Swift中自动对齐方法参数?
- c# – 使用EF4(edmx模型)时偶尔“底层提供程序无法打开”错
- 将PostgreSQL数据库复制到另一个服务器
- [C#.NET][VB.NET] 实践 IEqualityComparer 不分大小写
- 实体框架 – 实体框架4.3到Oracle:Web项目有效,NUnit没有
- 为什么人们使用纯XML数据库而不是普通的RDBM?
- SQLite3在IOS中的用法