2012-11-26 32 views
5

Tôi có một bộ sưu tập có tên người dùng làm trường. Mô hình xác định trường này là duy nhất. Tuy nhiên tôi đã có thể chèn một giá trị trùng lặp trong cơ sở dữ liệu.Chỉ số duy nhất mongoid cho phép các giá trị trùng lặp

class Profile 
    include Mongoid::Document 
    include Mongoid::Paperclip 

    field :username 
    index({ username: 1 } , { unique: true }) 
end 

Bộ sưu tập tuy nhiên có 2 tên người dùng giống nhau

{ "_id" : ObjectId("50b3b323421aa95da6000004"), 
    "username" : "marceloreuse" } 

{ "_id" : ObjectId("50b3b567421aa93d84000002"), 
    "username" : "marceloreuse" } 

gì đã xảy ra ở đây?

+0

ví dụ của bạn cũng hiển thị cùng một đối tượng chính xác - đó là chính xác hay sao chép/dán giám sát? – kmfk

+0

xấu của tôi ... đó là một vấn đề sao chép dán – Amit

+0

Trong sự tò mò - đây không phải là một colleciton sharded, phải không? – kmfk

Trả lời

9

Tôi sẽ kiểm tra kỹ các chỉ mục của bạn - từ bảng điều khiển thử db.collection.getIndexes() và đảm bảo chỉ mục của bạn có mặt.

Trong trường hợp bạn bỏ lỡ nó, Mongoid không tự động tạo chỉ mục vì bạn đã chỉ định nó - bạn cần chạy phần bao gồm: rake db:mongoid:create_indexes.

+0

tuyệt vời! hoạt động! thanks – Amit

+0

Tuy nhiên, mongoid vẫn không ném một lỗi khi thêm một mục trùng lặp. Mục nhập không được thêm vào, nhưng mongoid không đưa ra bất kỳ lỗi nào. – Amit

+0

Đó là do mặc định 'write concern' trong MongoDB - trình điều khiển sẽ không chờ phản hồi - nghĩa là bạn cần phải gọi' getLastError' hoặc thay đổi cài đặt persistence 'persist_in_safe_mode'. Kiểm tra [Mongoid: Persistence - Safe Mode] (http://two.mongoid.org/docs/persistence/safe_mode.html). – kmfk

Các vấn đề liên quan