如何组合2个MongoDB字段的唯一性?

时间:2014-11-13 20:50:10

标签: ruby-on-rails mongodb mongoid

我目前有一个Comment MongoDB表,我强制remote_id字段的唯一性。

The MongoDB documentation is here

我现在处于remote_id属性对于拥有该评论的用户而言应该唯一的情况。换句话说:

  • User 彼得只能有1 Comment remote_id 123
  • User 约翰只能有1 Comment remote_id 123
  • Users 彼得约翰都可以有1 Comment remote_id 123 < / LI>

如何组合实施2个字段的唯一性?

我的表在我的Ruby on Rails应用程序的模型文件中定义,它目前看起来像这样:

class Comment
  include Mongoid::Document
  include Mongoid::Timestamps

  field :datetime,          type: Time
  field :remote_id,         type: String

  index({ remote_id: 1 },   { unique: true })
  index({ user_id: 1 },     { background: true })

  belongs_to :user,         :inverse_of => :comments
end

1 个答案:

答案 0 :(得分:1)

您可以将以下行添加到模型中

validates :remote_id, uniqueness: { scope: :user }

也是为了完整性: 如果您想验证超过2个字段的唯一性

(例如,如果您希望评论对每个帖子每个用户唯一),请使用以下

validates :remote_id, uniqueness: { scope: [:user, :post] }

假设评论具有post字段或关系。