我目前正试图弄清楚,Nosql数据库如何处理关系以及文档的唯一标识真正意味着什么。独特性在NoSQL世界中意味着什么,我如何处理MongoDB中的关系?
也许我期待太多的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)?
+1链接。我想我终于明白了NoSQL数据库的概念。此外,DBRef关键字似乎是我需要的(“ 使用DBRef类。它将集合名称和_id作为参数传递给构造函数,然后可以使用Database类的FollowReference方法来获取引用的文档。”)为了读取目的,我需要手动更新Andrew Orsich指出的实体。 – tobsen 2011-04-15 06:06:21