2012-01-26 28 views
19

Bu koleksiyonda anahtar proje benzersiz yapmak istiyorum ama bu çalışmayı elde etmek istiyorum, burada benzer bir sorun bulundu.Şema tuşu benzersiz şema anahtarı ile benzersiz

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

i düğüm test.js uygulamayı çalıştırmak

, hala kopyalarını oluşturuyor.

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

// Edit hala burada, ben db.tasks.drop() toplama yeniden başlatma Mongo sudo durdurma MongoDB silip MongoDB başlamak yapmaya çalıştım tekrar hala aynı sorun programını koştu şey aynı problem dizindeki tekrarlanan verilere nasıl izin verilir?

cevap

22

Eğer 'benzersiz' (o kadar amaçlanan çalışır) böyle bir şey denemek, 'indeks' özelliği içine öznitelik yuva çünkü düzgün çalışmayabilir geçiyoruz Şema nesnesi: daha spesifik

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

Ya

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

not: sizin örneğin sana "dropDups" parametresi ile yapmaya çalıştığını bilmiyorum, mongoose documentation gibi görünüyor değildir.

+6

dropDups mongodb-native'den – jackdbernier

+1

dropDups sürüm 2.6'dan kullanımdan kaldırılmıştır https://docs.mongodb.com/v2.6/tutorial/create-a-unique-index/#drop-duplicates –