MongoDB Mongodb 我这种情况不适合 embed document?

twm · 2013年11月30日 · 最后由 twm 回复于 2013年11月30日 · 8171 次阅读
user = {
  id: 1
  name: 'abc'
}

question = {
  body: 'question body',
  user: {
    $ref: "user",
    $id: ObjectId("xxx"),
    $db: "test"
  },
  last_answer: {
    $ref: "answer",
    $id: ObjectId("xxx"),
    $db: "test"
  }
}

answer = {
 body: 'answer body',
 user: {
    $ref: "user",
    $id: ObjectId("xxx"),
    $db: "test"
  },
  question: {
    $ref: "question",
    $id: ObjectId("xxx"),
    $db: "test"
  },
  parent_answer: {
    $ref: "answer",
    $id: ObjectId("xxx"),
    $db: "test"
  }
}

我现在是用引用的形式,因为需要考虑一致性,但这样查询 回答 列表时候,除了回答本身,还有作者、父回答等,需要多次查询,如果用 嵌入 则只需要一次查询,可是当 问题 被修改,或者 user 信息被修改,信息就不一致了,这种情况不适用 嵌入 吗?谢谢。

用引用;利用片段缓存减少查询。

DBRef 看起来太可怕了. 很难想象如果你某天改了 db 的名字居然会影响到数据库里面的数据..

另外,一个 id 就能描述的事情居然让你弄成了 3 个字段。

目前网上对 DBRef 的评价不一,但是如果你想以后 sharding 简单一点的话,请慎重考虑。

原来用了 mongodb 内置的 DBRef 啊,我觉得 user_id 就够了,除非 DBRef 额外提供了什么功能。

#3 楼 @Rei #2 楼 @jeff_duan DBRef 不要用?不用没有什么影响吗?

我倾向于用你充分测试过的代码来控制这些细节。

#4 楼 @twm 没感觉 DBRef 带来什么好处,可能我没碰到合适的场合。

#6 楼 @Rei #5 楼 @jeff_duan

搜到了这篇文章 不知道有道理没有,保留 db 等信息是为了更快的找到引用的文档?

http://www.douban.com/group/topic/13407637/#!/i

需要 登录 后方可回复, 如果你还没有账号请 注册新账号