2015-06-15 14 views
5

Podczas wstawiania nowych dokumentów w mongodb, id nie wyglądają jak ObjectId i zamiast tego wyglądają jak obiekt.Dlaczego nowe dokumenty w Mongo mają obiekt, a nie ObjectId?

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

typu spodziewanych:

"_id" : ObjectId("55107edd8e21f20000fd79a6") 

Moja wersja MongoDB jest 3.0.3 i jest to dość dużo kodu i schemat

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

czy dane w dokumencie również wyglądają tak? – gypsyCoder

Odpowiedz

1

Zniekształcone obiekty są spowodowane konfliktem z wersją mongoose, której używa manga-q. Będziesz musiał zaktualizować wersję mango-q do wersji 0.1.0. Używałem wcześniej wersji 0.0.17 i widziałem dokładnie to samo zachowanie, które tutaj widziałem.

1

To jest co za ObjectID jest. Jest to po prostu obiekt, który zawiera te właściwości.

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

ObjectId jest typu BSON 12 bajtów, zbudowane z:

  • wartość 4 bajty reprezentujące sekund od epoki Unix
  • maszyna 3 bajty identyfikator,
  • 2-bajtowy identyfikator procesu i
  • licznik 3-bajtowy, rozpoczynający się od wartości losowej.
{ 
    "_bsontype" : "ObjectID", 
    "id" : "U\u0013[-Ф~\u001d$©t", 
    "generationTime" : 1.43439e+09 
} 

U\u0013[-Ф~\u001d$©t jest znak 12 binarny ciąg znaków, który zostanie przekonwertowany do znanego 24 char ciąg hex (55107edd8e21f20000fd79a6) gdy obiekt jako całość jest reprezentowana jako wartość tekstowa (czyli jego .toString funkcja jest wywoływana)

W Mongoose dokumenty mają również getter .id, który daje 24 znakowy hex jako wartość ciągu.

0

miałem ten sam problem tutaj: ObjectID not storing hexadecimal value

To na pewno problem ze środowiskami i coś dziwnego z instalacją zaparzania MongoDB. Stwierdziłem, że odinstalowanie z warzenia i ponowna instalacja ręcznie rozwiązało mój problem. http://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/

Podczas gdy nie zrozumiałem z kodu/technicznego punktu widzenia, dlaczego zwraca 12-bytowy identyfikator obiektu BSON zamiast szesnastkowego identyfikatora obiektu ... odinstalowanie MongoDB z naparu i ponowne zainstalowanie go ręcznie rozwiązało problem.

Powiązane problemy