Представление функции «спросить ответ» на Mongodb - PullRequest
0 голосов
/ 13 июня 2011

Функция «спросить ответ» в кворе - это техническая проблема, с которой я столкнулся.

По сути, один пользователь (подсказчик) просит другого пользователя (предложенного) ответить на вопрос (вопрос).

Как лучше всего представить эту схему в mongodb?

Я думал о том, чтобы иметь что-то вроде этого:

User class stores an array called suggested questions, which stores a pair of values
Each value is "suggester_userid | question_id"

Это было бы эффективно из поисковых систем, но, похоже, нарушает правильный дизайн схемы.

Что было бы хорошим способом сделать это?

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

По сути, один пользователь (подсказчик) спрашивает другой пользователь (предложил) ответить на вопрос (вопрос).

не уверен, что понимаю проблему, но коллекция

{ suggester:..., suggested:..., question:...}

может быть хорошо - предложивший и предложенный может быть проиндексирован.

1 голос
/ 14 июня 2011

У меня есть похожая схема в моем приложении, я использовал другую коллекцию, называемую пожертвование

это выглядит так (класс Ruby mongoid)

class Item
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia

  field :Suggested_id, :type => BSON::ObjectId
  field :Question_id, :type => BSON::ObjectId

  embedded_in :user
end

это в конечном итоге будет переведено на

User
 |
  _  Name
  _  Other fields
  _  Suggestions (embedded doc)
        - Suggested_id
        - Question_id

Если вы считаете, что предельный размер предложения может превышать размер монго документа, вы можете изменить встроенный документ на DbRef документ , чтобы у каждого пользовательского документа был один связанный документ предложения.поэтому в одном документе с предложениями будет указан user_id и все предложения, сделанные пользователем в виде встроенных документов (элементов)

 Suggestion
   |
    _ user_id
    _ items
        |
          _ suggested_id
          _ Questionid
        |
          _ suggested_id
          _ Questionid

Надеюсь, это поможет

...