为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB关系:嵌入还是引用?

MongoDB关系:嵌入还是引用?

qq_笑_17 2019-05-28 18:04:32
MongoDB关系:嵌入还是引用?我是MongoDB的新手 - 来自关系数据库背景。我想设计一个带有一些注释的问题结构,但我不知道用于评论的关系:embed或者reference?有一些注释的问题,比如stackoverflow,会有这样的结构:Question     title = 'aaa'     content = bbb'     comments = ???首先,我想使用嵌入式注释(我认为embed在MongoDB中推荐),如下所示:Question     title = 'aaa'     content = 'bbb'     comments = [ { content = 'xxx', createdAt = 'yyy'},                   { content = 'xxx', createdAt = 'yyy'},                   { content = 'xxx', createdAt = 'yyy'} ]很清楚,但我担心这种情况:如果我想编辑指定的评论,我该如何获取其内容及其问题?没有_id让我找到一个,也没有question_ref让我找到它的问题。(我是新手,我不知道如果没有_id和没有任何方法可以做到这一点question_ref。)我必须用ref不embed?然后我必须创建一个新的评论集合?
查看完整描述

4 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

如果我想编辑指定的评论,如何获取其内容及其问题?

您可以按子文档查询:db.question.find({'comments.content' : 'xxx'})

这将返回整个问题文件。要编辑指定的注释,您必须在客户端上找到注释,进行编辑并将其保存回数据库。

通常,如果您的文档包含一个对象数组,您将发现这些子对象需要在客户端进行修改。


查看完整回答
反对 回复 2019-05-28
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

好吧,我有点迟了但仍想分享我的架构创建方式。

我有一些可用一个词描述的模式,就像你在经典的OOP中所做的那样。

例如

  • 评论

  • 帐户

  • 用户

  • 博文

  • ...

每个模式都可以保存为Document或Subdocument,因此我为每个模式声明了这一点。

文献:

  • 可以作为参考。(例如,用户发表了评论 - >评论对用户有“制作者”的引用)

  • 在您的应用程序中是“根”。(例如博客帖子 - >有关于博客帖子的页面)

子文档:

  • 只能使用一次/永远不是参考。(例如评论保存在博文中)

  • 在您的应用程序中永远不是“根”。(评论只显示在博客页面中,但页面仍然是关于博客帖子)


查看完整回答
反对 回复 2019-05-28
  • 4 回答
  • 0 关注
  • 1298 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信