为什么 mongo 中的新文档有一个对象而不是一个 ObjectId
Why new documents in mongo have an object and not an ObjectId?
在mongodb中插入新文档时,id看起来不像ObjectId,而是看起来像一个对象。
"_id" : {
"_bsontype" : "ObjectID",
"id" : "U'u0013[-Ф~'u001d$©t",
"generationTime" : 1.43439e+09
}
预期类型:
"_id" : ObjectId("55107edd8e21f20000fd79a6")
我的mongodb版本是3.0.3,这几乎是代码和模式
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'
}]
});
这就是 ObjectID。它只是一个包含这些属性的对象。
http://docs.mongodb.org/manual/reference/object-id/
ObjectId 是一个 12 字节的 BSON 类型,使用以下方法构造:
- 一个 4 字节的值,表示自 Unix 纪元以来的秒数,
- 一个 3 字节的机器标识符,
- 一个 2 字节的进程 ID,以及
- 一个 3 字节计数器,从随机值开始。
{
"_bsontype" : "ObjectID",
"id" : "U'u0013[-Ф~'u001d$©t",
"generationTime" : 1.43439e+09
}
U'u0013[-Ф~'u001d$©t
是 12 个字符的二进制字符串,当对象作为一个整体表示为文本值(即调用其.toString
函数)时,它会转换为熟悉的 24 个字符的十六进制字符串 (55107edd8e21f20000fd79a6
)
在 Mongoose 中,文档还有一个.id
getter,它为您提供 24 个字符的十六进制作为字符串值。
错误的 ObjectId 是由与 mongoose-q 使用的猫鼬版本冲突引起的。您需要将猫鼬-q 更新到版本 0.1.0。我之前使用 0.0.17,并且看到了与您在此处看到的完全相同的行为。
我在这里遇到了同样的问题:对象ID不存储十六进制值
这绝对是环境的问题,也是MongoDB的brew安装的奇怪之处。我发现从brew卸载并手动重新安装解决了我的问题。http://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/
虽然我没有从代码/技术角度弄清楚为什么它返回 12 字节 BSON ObjectID 而不是十六进制 ObjectID......从brew中卸载MongoDB并手动重新安装解决了这个问题。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何防止一个ObjectID变成基元
- 获取未定义试图获取一个集合的ObjectId
- 为什么 mongo 中的新文档有一个对象而不是一个 ObjectId