我遇到的情况是,将域模型的特定部分表示为关系更好。我阅读了MongoDB中database references的部分,并了解到您可以通过提供对外部集合中各种文档的$ ref引用的JSON数组来提供对多个文档的引用。
我在代码中添加对外部文档的引用时看到的所有示例都只针对单个文档,并且它们创建了MongoDBRef类型的公共属性。在我看来,这种方法有很多不必要的开销,但它也没有说明如何处理存储多个文档的引用。
如果您想在Mongo中提供外部文档之间的一对多关系,是否有必要提供包含MongoDBRef对象的集合属性?是否可以在我的C#代码中坚持使用标准实体对象的集合,并使用BsonClassMap将其映射到Mongo文档?
下面是一个简单的类,代表我目前拥有的模型。它似乎正确地保存了文档和引用,但我不喜欢公开MongoDBRef对象的公共集合以及为使用Person类的任何人添加新文档所需的开销。
如果重要,我正在使用MongoDB 2.0及其C#驱动程序。
// This is how my class currently looks
public class Person
{
public string Name { get; set; }
public List<MongoDBRef> Vehicles { get; private set; }
public Person()
{
Vehicles = new List<MongoDBRef>();
}
}
// This is what I want my class to look like
public class Person
{
public string Name { get; set; }
public List<Vehicle> Vehicles { get; private set; }
public Person()
{
Vehicles = new List<Vehicle>();
}
}
答案 0 :(得分:3)
DBRefs不是用于存储对已知文档类型的引用的适当工具。而只是将引用文档的_id值保存在集合中。鉴于一个好的映射库(不确定C#,但是C#相当于pymongo,mongoose,morphia等),它将允许你完全按照你想要的那样。
只有在编译时不知道存储引用所需的文档类型(例如,包含图像或文本等的“内容”字段)时,才应使用DBRefs。