2015-06-15 12 views
5

Quando si inseriscono nuovi documenti in mongodb, gli ID non assomigliano a ObjectId e invece assomigliano a un oggetto.Perché i nuovi documenti in mongo hanno un oggetto e non un ObjectId?

"_id" : { 
     "_bsontype" : "ObjectID", 
     "id" : "U\u0013[-Ф~\u001d$©t", 
     "generationTime" : 1.43439e+09 
} 

tipo previsto:

"_id" : ObjectId("55107edd8e21f20000fd79a6") 

La mia versione MongoDB è 3.0.3 e questo è più o meno il codice e lo schema

var Script = { 
    run: function() { 
     return CourseModel.findQ() 
     .then(function(courses){ 
      return courses.map(worker); 
     }).catch(function(error){ 
      console.log(error); 
     }); 
    } 
}; 

function worker(course){ 
    var category = { name: course.name, displayOrder: 0 }; 
     return CategoryModel.createQ(category).then(function() { 
      course.set('name', undefined); 
      return course.saveQ(); 
     }); 
} 
module.exports = Script; 

var CategorySchema = new Schema({ 
    name: { 
     type: String, 
     required: true, 
     unique: true 
    }, 
    active: { 
     type: Boolean, 
     default: true 
    }, 
    displayOrder: Number, 
    updateDate: Date, 
    subcategories: [{ 
     type: Schema.Types.ObjectId, 
     ref: 'subcategories' 
    }] 
}); 
+0

I dati nel documento hanno anche questo aspetto? – gypsyCoder

risposta

1

Gli ObjectId non validi sono causati da un conflitto con la versione di mangusta che sta utilizzando mangusta-q. Devi aggiornare a mangusta-q ​​alla versione 0.1.0. Stavo usando 0.0.17 in precedenza e ho visto esattamente lo stesso comportamento che hai visto qui.

1

Questo è quello che un ObjectID è. È semplicemente un oggetto che contiene quelle proprietà.

http://docs.mongodb.org/manual/reference/object-id/

ObjectId è un tipo BSON 12 byte, costruite con:

  • un valore di 4 byte che rappresenta i secondi da epoch Unix,
  • una macchina 3-byte identificatore,
  • un ID processo a 2 byte e
  • un contatore a 3 byte, che inizia con un valore casuale.
{ 
    "_bsontype" : "ObjectID", 
    "id" : "U\u0013[-Ф~\u001d$©t", 
    "generationTime" : 1.43439e+09 
} 

U\u0013[-Ф~\u001d$©t è il carattere 12 binario stringa che viene convertito nella stringa familiare 24 char esagonale (55107edd8e21f20000fd79a6) quando l'oggetto nel suo complesso è rappresentato come un valore di testo (cioè la sua funzione .toString viene invocato)

In Mongoose i documenti hanno anche un getter .id che fornisce l'esagono di 24 caratteri come valore di stringa.

0

ho avuto lo stesso problema qui: ObjectID not storing hexadecimal value

E 'sicuramente un problema con gli ambienti e qualcosa di strano con l'installazione infuso di MongoDB. Ho scoperto che la disinstallazione da brew e la reinstallazione hanno risolto manualmente il problema. http://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/

Mentre non ho capire da un punto di vista codice/tecnico perché sta tornando il 12-byt BSON IDOggetto anziché esadecimale ObjectID ... disinstallare MongoDB da birra e la reinstallazione risolto il problema manualmente.

Problemi correlati