【问题标题】:Advice on Simple MongoDB Database Structure关于简单 MongoDB 数据库结构的建议
【发布时间】:2011-06-22 04:33:55
【问题描述】:

我刚刚开始使用 MongoDB 和 Mongoid for Rails,需要一些关于设计简单博客数据库的正确方法的建议。

我目前正在使用下面的结构,但我需要一种方法来查询给定用户编写的所有 cmets(关系数据库等效项为 Comment.where('user_id = ?', user_id))。

这是正确的设置,还是我应该将 cmets 移到他们自己的文档中,而不是将它们嵌入到帖子中(就像我在关系数据库模式中那样)?

感谢任何建议,谢谢。

数据库架构

post {
  _id: (object id)
  title: string
  body: string
  user_id: reference
  comments: [
    { _id: (object id), body: string, user_id: reference },
    { _id: (object id), body: string, user_id: reference },
    ...
  ]
}

user {
  _id: (object id)
  name: string
}

在MongoDB中,我对应的模型是:

class Post
  include Mongoid::Document
  field :title
  field :body
  embeds_many :comments
  references_one :user
end

class Comment
  include Mongoid::Document
  field :body
  embedded_in :post
  references_one :user
end

class User
  include Mongoid::Document
  field :name
  references_many :posts
end

【问题讨论】:

  • 一旦我发布了这个,StackOverflow 抛出了this related post,它提供了一个很好的答案。不过,就更好的方法获得意见仍然是件好事。

标签: ruby-on-rails mongodb database-design mongoid nosql


【解决方案1】:

http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects)

但不确定您真正需要多少不同的选项。

嵌入式文档或多个查询或数据库引用是选项。

不知道为什么必须一遍又一遍地问这个问题。

【讨论】:

    【解决方案2】:

    Mongodb.org 上有一篇很棒的文章,介绍了建模 cmets 的各种选择。

    查看:http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails#MongoDBDataModelingandRails-ModelingComments

    【讨论】:

    • 谢谢。该页面的以下引用完美地回答了这个问题:“不用说,在他们自己的集合中建模 cmets 也有助于各种站点范围的聚合,包括显示最新的、按用户分组等。”
    【解决方案3】:

    您可以在 MongoDB 中使用点表示法对嵌入式文档运行查询过滤器。 在您的情况下,要按用户检索所有 cmets,您可以简单地执行以下操作:

    Post.where("comments.user_id" => myUser.id).all
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 2010-12-21
      • 2014-09-26
      相关资源
      最近更新 更多