30

在 MongoDB 中使用DBREF 数据类型,文档可能如下所示。但是$ref在每一行中都有字段感觉是多余的,因为每一行显然都指向users集合。

有没有办法在没有多余的字段的情况下引用其他文档$ref

{
    $id: {$oid : "4f4603820e25f4c515000001"},
    title:   "User group",
    users: [ 
        {_id: {$ref: "users", $id: { $oid: "4f44af6a024342300e000002"}}, isAdmin: true }
    ]
],
4

3 回答 3

47

在我看来,在使用 mongodb 时应该避免使用 Dbref,至少如果你使用需要可扩展性的大型系统。

据我所知,所有驱动程序都会发出额外的请求来加载 DBRef,所以它不是数据库中的“加入”,它非常昂贵。

有没有一种方法可以引用其他文档而没有多少多余的 $ref 字段?

是的,请记住引用,为“外键”(例如 RefUserId 或只是 UserId)创建命名约定,并仅存储引用文档的 id。需要时自行加载参考文档。还要留意任何非规范化,嵌入你可以做的,因为它通常会大大提高性能。

于 2012-02-23T11:57:43.987 回答
6

除非您使用驱动程序特定的方法来访问dbref,否则它应该是不必要的。

在您手动管理连接的情况下(即您知道要“连接”到哪个其他集合),只存储 ObjectId 就足够了。

于 2012-02-23T11:47:35.427 回答
3

文档

手动参考是一种替代方法,文档说手动参考比 DBREF 更可取(尽管我不确定为什么)。当引用的对象位于另一个数据库中或集合名称不明显时,DBREF 很有帮助。

非规范化/嵌入优于任何类型的链接,因为这样您可以获得原子更新并且不需要重新查询相关数据。

于 2016-01-05T18:03:21.277 回答