繁体   English   中英

使MongoDB更具“关系性”

[英]Making MongoDB more 'relational'

我喜欢使用MongoDB,但无法完全消除它的非关系性。 据我从mongo用户和文档中得知:“很好,只需复制部分数据”。

由于我担心扩展,并且基本上只是不记得要更新代码的一部分以更新数据的正确部分,因此在我的API必须返回数据时仅执行一个额外的查询似乎是一个不错的权衡对于包含帖子摘要的用户:

{
  "id": 1,
  "name": "Default user",
  "posts_summary": [
    {
      "id": 1,
      "name": "I am making a blog post",
      "description": "I write about some stuff and there are comments after it",
      "tags_count": 3
    },
    {
      "id": 2,
      "name": "This is my second post",
      "description": "In this one I write some more stuff",
      "tags_count": 4
    }
  ]
}

...帖子数据如下所示:

//db.posts
{
  "id": 1,
  "owner": 1,
  "name": "I am making a blog post",
  "description": "I write about some stuff and there are comments after it",
  "tags": ["Writing", "Blogs", "Stuff"]
},
{
  "id": 2,
  "owner": 1,
  "name": "This is my second post",
  "description": "In this one I write some mores tuff",
  "tags": ["Writing", "Blogs", "Stuff", "Whatever"]
}

因此,在API背后,当获取用户的查询成功时,我正在对posts集合进行附加查询,以获取所需的“ posts_summary”数据,并在API发送响应之前将其添加到其中。

考虑到以后将解决的问题,这似乎是一个不错的权衡。 这是某些mongo用户为避免不相关而做的事情,还是在设计架构时犯了一个错误?

您可以使用模式对象作为参考,以使用mongoose http://mongoosejs.com/docs/populate.html来实现关系映射

使用猫鼬我们的模式将是这样的:

User:Schema({
  _id     : Number,
  name    : String,
  owner     : String,
  Post : [{ type: Schema.Types.ObjectId, ref: 'Post' }]
}); 

    Post:Schema({
      _id     : Number,
      name    : String,
      owner     : String,
      description     : String,
      tags:[String]
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM