ऐसा लगता है कि यह परिवर्तन करने से पहले ही आपके पास डुप्लिकेट मान थे।
यहाँ एक परीक्षण मामला है। अनुक्रमणिका परिनियोजित करने से पहले अपने संग्रह में इस तरह के दो दस्तावेज़ रखें:
{ "timestamp" : ISODate("2014-06-02T04:09:22.683Z") }
{ "timestamp" : ISODate("2014-06-02T04:09:22.683Z") }
फिर मूल सूची के साथ:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
var stateChange = mongoose.Schema({
timestamp: { type: Date, required: true, unique: true }
});
var Change = mongoose.model( 'Change', stateChange );
var date = new Date();
var change = new Change({
timestamp: date
});
change.save(function(err,change) {
if ( err )
throw err;
console.log( change );
var new_change = new Change({
timestamp: date
});
new_change.save(function(err,change) {
if ( err )
throw err;
console.log( change );
});
});
आप देखेंगे कि दोनों दस्तावेज़ जोड़े गए हैं। लेकिन यहां बात यह है कि सूचकांक तैनात नहीं हुआ क्योंकि इससे एक त्रुटि हुई जो आपने नहीं देखी। आप इसे शेल में देख सकते हैं।
db.changes.getIndicies()
जो दिखाएगा कि आपकी अनूठी अनुक्रमणिका नहीं बनाई गई थी:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.changes"
}
]
अगर आपने फिर से शुरुआत की है और आपके पास मूल दस्तावेज़ से केवल एक दस्तावेज़ है
{ "timestamp" : ISODate("2014-06-02T04:09:22.683Z") }
फिर उपरोक्त कोड नमूना अनुक्रमणिका बनाता है और दूसरी प्रविष्टि में त्रुटि उत्पन्न करता है:
{ __v: 0,
timestamp: Mon Jun 02 2014 14:29:44 GMT+1000 (EST),
_id: 538bfdb8961376867ae42e61 }
/xxxxx/node_modules/mongoose/lib/utils.js:413
throw err;
^
MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.changes.$timestamp_1 dup key: { : new Date(1401683384647) }
इस बार इंडेक्स ठीक से बनाया गया:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.changes"
},
{
"v" : 1,
"unique" : true,
"key" : {
"timestamp" : 1
},
"name" : "timestamp_1",
"ns" : "test.changes",
"background" : true,
"safe" : null
}
]
मौजूदा डुप्लीकेट को हटाने के लिए आपको अपने डेटा के माध्यम से जाना होगा या केवल dropDups
आपके लिए उन्हें स्वचालित रूप से हटाने का विकल्प।
दस्तावेज़ीकरण ट्यूटोरियल भी देखें:एक अद्वितीय अनुक्रमणिका बनाएं