2016-03-02 13 views
5

Tôi muốn thêm chỉ mục duy nhất vào trường bỏ qua giá trị null trong trường được lập chỉ mục duy nhất và bỏ qua các tài liệu được lọc dựa trên partialFilterExpression.Chỉ mục duy nhất trong mongoDB 3.2 bỏ qua các giá trị rỗng

Vấn đề là chỉ mục thưa thớt không thể được sử dụng với chỉ mục một phần.

Ngoài ra, thêm chỉ mục duy nhất, thêm giá trị null vào trường khóa chỉ mục và do đó các tài liệu không thể bỏ qua dựa trên tiêu chí tồn tại $ trong PartialFilterExpression.

Có thể trong MongoDB 3.2 để khắc phục tình huống này không?

+0

Giá trị rỗng có bất kỳ ý nghĩa đặc biệt nào trong trường hợp của bạn không? Nếu không, bạn luôn có thể $ unset trường cho tất cả các giá trị null mà làm cho nó có thể sử dụng toán tử tồn tại $. – joao

+1

Thêm tự động chỉ mục duy nhất thêm trường rỗng để chúng tôi không thể có tài liệu mà không có trường khóa được lập chỉ mục duy nhất. – Nikhil

Trả lời

3

Vâng, bạn có thể tạo index một phần trong MongoDB 3.2

Xin xem https://docs.mongodb.org/manual/core/index-partial/#index-type-partial

MongoDB khuyên sử dụng các chỉ số phần trên chỉ số thưa thớt. Tôi sẽ đề nghị bạn thả chỉ số thưa thớt của bạn để ủng hộ chỉ mục từng phần.

+0

Tôi phải sử dụng PartialFilterExpression để lọc dữ liệu để lập chỉ mục và ở bên phải sử dụng chỉ mục duy nhất. – Nikhil

+0

Điều duy nhất là tôi muốn một số tài liệu không có trường khóa được lập chỉ mục duy nhất mà dường như không thể hoặc tôi có thể không biết. – Nikhil

7

Tôi đang thêm câu trả lời này vì tôi đang tìm kiếm giải pháp và không tìm thấy giải pháp. Điều này có thể không trả lời chính xác câu hỏi này hoặc có thể, nhưng sẽ giúp nhiều người khác ra khỏi đó như tôi.

Ví dụ. Nếu trường với nullhouseName và nó là loại string, giải pháp có thể như thế này

db.collectionName.createIndex(
    {name: 1, houseName: 1}, 
    {unique: true, partialFilterExpression: {houseName: {$type: "string"}}} 
); 

này sẽ bỏ qua các null giá trị trong lĩnh vực houseName và vẫn là duy nhất.

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