2012-01-26 13 views
19

Voglio rendere il progetto chiave univoco in quella raccolta ma non riesco a farlo funzionare, ho riscontrato un problema simile qui.I duplicati di Mongoose con la chiave dello schema univoca

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(); 

Quando eseguo l'applicazione con test.js nodi, crea ancora duplicati.

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") } 

// Modifica ancora lo stesso problema, ecco quello che ho cercato di fare cancellare il db.tasks.drop() raccolta riavvio fermata mongo sudo MongoDB e avviare MongoDB, corse di nuovo e ancora il programma stesso problema, in che modo consente dati duplicati sull'indice?

risposta

22

L'oggetto dello schema si sta passando potrebbe non funzionare correttamente perché si sta nidificazione 'unico' attributo in 'indice' attributo, provare qualcosa di simile (funziona come previsto):

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})); 

O più specificamente per il tuo esempio:

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

Nota: non so quello che stai cercando di fare con il parametro "dropDups", non sembra essere in mongoose documentation.

+6

dropDups proviene da mongodb-native – jackdbernier

+1

dropDups è deprecato dalla versione 2.6 https://docs.mongodb.com/v2.6/tutorial/create-a-unique-index/#drop-duplicates –

Problemi correlati