【问题标题】:Referencing Multiple Foreign Documents with MongoDBRef in MongoDB在 MongoDB 中使用 MongoDBRef 引用多个外部文档
【发布时间】:2011-12-17 09:25:36
【问题描述】:

我遇到过一种情况,将我的域模型的特定部分表示为关系会更好。我阅读了 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>();
    }
}

【问题讨论】:

    标签: c# mongodb


    【解决方案1】:

    DBRefs 不是存储对已知文档类型的引用的合适工具。相反,只需将引用文档的 _id 值保存在您的集合中。给定一个好的映射库(不确定 C#,但 C# 等效于 pymongo、mongoose、morphia 等),它可以让你做你想做的事。

    仅当您在编译时不知道需要存储对哪种文档的引用时才应使用 DBRefs(例如,包含图像或文本等的“内容”字段)。

    【讨论】:

    • 感谢您的回复。当你说 C# 等价物可以让我做我想做的事时,这个功能有名字吗?我已经阅读了有关 C# 驱动程序的文档,但我对此一无所知,所以我希望我只是忽略了一些东西。
    • 这通常不是驱动程序的功能,坦率地说,我在 C3 上跟不上速度。似乎它实际上与几个不同的驱动程序有点混淆,其中一些支持 LINQ,而另一些则不太支持。如果你被 C# 卡住了,你可能不得不手动完成,或者在 github 或 google 代码上寻找一些早期的努力。
    • 为什么当文档类型已知时 DBRefs 不合适!?
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2020-10-04
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多