2015-06-15 13 views
5

Khi chèn tài liệu mới vào tệp mongodb, các id không giống như ObjectId và thay vào đó chúng trông giống như một đối tượng.Tại sao tài liệu mới trong Mongo có đối tượng chứ không phải ObjectId?

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

loại dự kiến:

"_id" : ObjectId("55107edd8e21f20000fd79a6") 

phiên bản MongoDB của tôi là 3.0.3 và điều này là khá nhiều mã và 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

dữ liệu trong tài liệu có giống như thế này không? – gypsyCoder

Trả lời

1

ObjectIds không đúng định dạng là do xung đột với phiên bản mongoose mà mongoose-q đang sử dụng. Bạn sẽ cần cập nhật lên mongoose-q lên phiên bản 0.1.0. Tôi đã sử dụng 0.0.17 trước đây và thấy chính xác hành vi tương tự mà bạn đã thấy ở đây.

1

Đó gì một ObjectId là. Nó chỉ đơn giản là một đối tượng có chứa các thuộc tính đó.

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

ObjectId là một loại BSON 12-byte, được xây dựng sử dụng:

  • một giá trị 4-byte đại diện cho giây kể từ khi kỷ nguyên Unix,
  • một máy 3-byte số nhận dạng,
  • id tiến trình 2 byte và
  • bộ đếm 3 byte, bắt đầu bằng một giá trị ngẫu nhiên.
{ 
    "_bsontype" : "ObjectID", 
    "id" : "U\u0013[-Ф~\u001d$©t", 
    "generationTime" : 1.43439e+09 
} 

U\u0013[-Ф~\u001d$©t là nhân vật 12 nhị phân chuỗi đó được chuyển đổi sang chuỗi quen thuộc 24 char hex (55107edd8e21f20000fd79a6) khi đối tượng như một toàn thể được biểu diễn như một giá trị văn bản (tức là chức năng .toString của nó được gọi)

Trong Mongoose các tài liệu cũng có một .id getter cung cấp cho bạn 24 char hex dưới dạng giá trị chuỗi.

0

Tôi đã có cùng một vấn đề ở đây: ObjectID not storing hexadecimal value

Đó chắc chắn là một vấn đề với môi trường và một cái gì đó kỳ lạ với việc cài đặt brew của MongoDB. Tôi nhận thấy rằng việc gỡ cài đặt từ máy pha và cài đặt lại theo cách thủ công đã giải quyết được sự cố của tôi. http://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/

Trong khi tôi không tìm ra từ mã/quan điểm kỹ thuật tại sao nó trả về 12 đối tượng BSON ObjectID thay vì ObjectID thập lục phân ... gỡ cài đặt MongoDB khỏi quá trình tạo và cài đặt lại thủ công vấn đề.

Các vấn đề liên quan