MongoDB - DBREF是否必要?

时间:2012-02-23 11:41:45

标签: mongodb dbref

使用MongoDB中的DBREF datatype,文档可能如下所示。但是,每行中$ref字段都会显得多余,因为每一行显然都指向users集合。

有没有办法引用其他文档而没有多余的$ref - 字段?

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

3 个答案:

答案 0 :(得分:36)

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

据我所知,所有驱动程序都提出了加载DBRef的额外请求,因此它不是“ join ”在数据库中,它非常昂贵。

  

有没有办法在不使用的情况下引用其他文档   多余的$ ref-field?

是的,请记住引用,为“外键”创建命名约定(类似于RefUserId或仅仅是UserId)并存储引用文档的id。需要时自己加载参考文档。同时保持睁大眼睛看任何非规范化,嵌入你可以做,因为它通常会大大提高性能。

答案 1 :(得分:7)

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

如果你手动管理连接(即你知道哪个其他集合要“加入”),只存储ObjectId就足够了。

答案 2 :(得分:2)

来自docs

Manual references是另一种选择,the docs say手动参考优于DBREF(though I'm not sure why)。 当引用的对象存在于另一个数据库中或者集合名称不明显时,DBREF会很有用。

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