Рекомендации по простой структуре базы данных MongoDB - PullRequest
4 голосов
/ 06 февраля 2011

Я только начинаю работать с MongoDB и Mongoid for Rails, и мне нужны некоторые советы о том, как правильно создать простую базу данных блогов.

В настоящее время я использую структуру ниже, но мне нужен способ запросить все комментарии, написанные данным пользователем (реляционный эквивалент БД будет Comment.where('user_id = ?', user_id)).

Правильно ли это настроено, или я должен переместить комментарии в их собственный документ, а не вставлять их в посты (как я бы это делал в реляционной схеме БД)?

Спасибо за любые советы, спасибо.

Схема базы данных

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

Ответы [ 3 ]

3 голосов
/ 06 февраля 2011

На Mongodb.org есть отличная статья о различных вариантах моделирования комментариев.

Выезд: http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails#MongoDBDataModelingandRails-ModelingComments

1 голос
/ 09 февраля 2011

Вы можете использовать точечную нотацию в MongoDB для запуска фильтров запросов к внедренным документам.В вашем случае, чтобы получить все комментарии пользователя, вы можете просто сделать:

Post.where("comments.user_id" => myUser.id).all
0 голосов
/ 06 февраля 2011

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

Но не уверен, сколько разных вариантов вам действительно нужно.

Варианты: встроенные документы или несколько запросов или ссылок на базы данных.

Не уверен, почему об этом нужно спрашивать снова и снова.

...