2012-01-26 38 views
19

Tôi muốn làm cho dự án chính duy nhất trên bộ sưu tập đó nhưng tôi không thể làm việc này, tôi đã tìm thấy sự cố tương tự ở đây.Mongoose trùng lặp với khóa lược đồ duy nhất

task.js

function make(Schema, mongoose) { 

    var Tasks = new Schema({ 
     project: { type: String, index: { unique: true, dropDups: true }}, 
     description: String 
    }); 

    mongoose.model('Task', Tasks); 
} 
module.exports.make = make; 

test.js

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/rss'); 

var Schema = mongoose.Schema 
    , ObjectId = Schema.ObjectId; 

require('./task.js').make(Schema, mongoose); 
var Task = mongoose.model('Task'); 
var newTask = new Task({ 
    project: 'Starting new project' 
    , description: 'New project in node' 
}); 
newTask.save(function(err) { 
    if (err) console.log('Error on saving'); 
}); 

mongoose.disconnect(); 

Khi tôi chạy ứng dụng với test.js nút, vẫn tạo ra bản sao.

MongoDB shell version: 2.0.2 
connecting to: rss 
> db.tasks.find() 
> db.tasks.find() 
{ "project" : "Starting new project", "description" : "New project in node", "_id" : ObjectId("4f21aaa3d48d4e1533000001") } 
{ "project" : "Starting new project", "description" : "New project in node", "_id" : ObjectId("4f21aaa4d9a8921a33000001") } 
{ "project" : "Starting new project", "description" : "New project in node", "_id" : ObjectId("4f21aaa57ebeea1f33000001") } 

// Sửa vẫn cùng một vấn đề, đây là những gì tôi đã cố gắng để làm xóa db.tasks.drop() bộ sưu tập restart Mongo sudo dừng MongoDB và bắt đầu MongoDB, chạy lại chương trình và vẫn cùng một vấn đề, làm thế nào nó cho phép dữ liệu trùng lặp trên chỉ mục?

Trả lời

22

Đối tượng Schema bạn đang đi qua có thể không hoạt động chính xác bởi vì bạn đang làm tổ 'độc đáo' thuộc tính thành 'index' thuộc tính, hãy thử một cái gì đó như thế này (nó hoạt động như dự kiến):

User = mongoose.model('User', new Schema({ 
    firstName: { 
     type:String, 
     required: true, 
    }, 
    lastName: { 
     type:String, 
     required: true, 
    }, 
    email: { 
     type:String, 
     required: true, 
     unique: true 
    }, 
    address: String, 
    phone: { 
     type:String, 
     required: true, 
    }, 
    password: { 
     type:String, 
     required: true, 
     set: Data.prototype.saltySha1 // some function called before saving the data 
    }, 
    role: String 
},{strict: true})); 

Hoặc cụ thể hơn ví dụ của bạn:

var Tasks = new Schema({ 
    project: { 
     type: String, 
     unique: true, 
     index: true 
    }, 
    description: String 
}); 

Lưu ý: tôi không biết những gì bạn đang cố gắng để làm với "dropDups" tham số, nó không có vẻ là trong mongoose documentation.

+6

dropDups là từ mongodb-native – jackdbernier

+1

dropDups không được chấp nhận từ phiên bản 2.6 https://docs.mongodb.com/v2.6/tutorial/create-a-unique-index/#drop-duplicates –

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