MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

दिनांक फ़ील्ड पर MongoDB/नेवला अद्वितीय बाधा

ऐसा लगता है कि यह परिवर्तन करने से पहले ही आपके पास डुप्लिकेट मान थे।

यहाँ एक परीक्षण मामला है। अनुक्रमणिका परिनियोजित करने से पहले अपने संग्रह में इस तरह के दो दस्तावेज़ रखें:

{ "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 आपके लिए उन्हें स्वचालित रूप से हटाने का विकल्प।

दस्तावेज़ीकरण ट्यूटोरियल भी देखें:एक अद्वितीय अनुक्रमणिका बनाएं




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Php और mongodb . में आज तक का टाइमस्टैम्प

  2. बैश खोल स्क्रिप्ट से mongoDB से कनेक्ट करना

  3. MongoMapper के साथ अलग पूछताछ

  4. एक json फ़ाइल आयात करने के लिए mongoimport का उपयोग कैसे करें

  5. मोंगोडीबी $ सॉर्ट