Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么mongo中的新文档有一个object而不是ObjectId?_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript 为什么mongo中的新文档有一个object而不是ObjectId?

Javascript 为什么mongo中的新文档有一个object而不是ObjectId?,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,在mongodb中插入新文档时,ID看起来不像ObjectId,而是像一个对象 "_id" : { "_bsontype" : "ObjectID", "id" : "U\u0013[-Ф~\u001d$©t", "generationTime" : 1.43439e+09 } 预期类型: "_id" : ObjectId("55107edd8e21f20000fd79a6") 我的mongodb版本是3.0.3,这几乎就是代码和模式 var

在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。它只是一个包含这些属性的对象

ObjectId是一个12字节的BSON类型,使用以下内容构造:

  • 一个4字节的值,表示自Unix纪元以来的秒数
  • 一个3字节的机器标识符
  • 2字节的进程id,以及
  • 以随机值开始的3字节计数器
U\u0013[-з~\u001d$©t
是12个字符的二进制字符串,当对象作为一个整体表示为文本值(即调用其函数)时,该字符串被转换为常见的24个字符的十六进制字符串(
55107edd8e21f20000fd79a6


在Mongoose中,文档还有一个
.id
getter,它将24字符十六进制作为字符串值提供给您。

我在这里遇到了同样的问题:

这肯定是环境问题,而且brew安装MongoDB时有些奇怪。我发现从brew卸载并手动重新安装解决了我的问题


虽然我没有从代码/技术角度理解它返回12 byt BSON ObjectID而不是十六进制ObjectID的原因……但从brew中卸载MongoDB并手动重新安装解决了这个问题。

格式错误的ObjectID是由于与mongoose-q使用的mongoose版本冲突造成的。您需要升级日期从mongoose-q到版本0.1.0。我之前使用的是0.0.17,看到的行为与您在这里看到的完全相同。

文档中的数据是否也是这样?
{
    "_bsontype" : "ObjectID",
    "id" : "U\u0013[-Ф~\u001d$©t",
    "generationTime" : 1.43439e+09
}