javascript - 如何在 Mongoose 中将 _id 设置为 db 文档?

我正在尝试通过计算数据库中的文档来为我的 Mongoose 模型动态创建 _id,并使用该数字创建 _id(假设第一个 _id 为 0)。但是,我无法从我的值中设置 _id。这是我的代码:

//Schemas
var Post = new mongoose.Schema({
    //_id: Number,
    title: String,
    content: String,
    tags: [ String ]
});

var count = 16;

//Models
var PostModel = mongoose.model( 'Post', Post );

app.post( '/', function( request, response ) {

    var post = new PostModel({
        _id: count,
        title: request.body.title,
        content: request.body.content,
        tags: request.body.tags
    });

    post.save( function( err ) {
        if( !err ) {
            return console.log( 'Post saved');
        } else {
            console.log( err );
        }
    });

    count++;

    return response.send(post);
});

我尝试了多种不同的方式来设置 _id,但它对我不起作用。这是最新的错误:

{ message: 'Cast to ObjectId failed for value "16" at path "_id"',
  name: 'CastError',
  type: 'ObjectId',
  value: 16,
  path: '_id' }

如果你知道发生了什么,请告诉我。

最佳答案

您需要将 _id 属性声明为架构的一部分(您已将其注释掉),或者使用 _id 选项并将其设置为 false (您正在使用 id 选项,它创建了一个虚拟 getter 将 _id 转换为字符串,但仍然创建了一个 _id ObjectID 属性,因此会出现转换错误)。

所以要么这样:

var Post = new mongoose.Schema({
    _id: Number,
    title: String,
    content: String,
    tags: [ String ]
});

或者这个:

var Post = new mongoose.Schema({
    title: String,
    content: String,
    tags: [ String ]
}, { _id: false });

https://stackoverflow.com/questions/19760829/

相关文章:

macos - 如何为 MongoDB 创建配置文件

mongodb - 如何为 MongoDB 中的嵌入式文档创建唯一 ID?

mongodb - 使用 mongimport 导入 JSON 文件,不断得到 `unexpecte

mongodb - 了解MongoDB缓存系统

mongodb - 如何在启动时为 MongoDB 容器创建数据库?

mongodb - 如何在 MongoDB 集合中获取特定的嵌入文档?

node.js - 一个包含 node.js 和 mongodb 的整个网站?

mongodb - 如何在 MongoDB Compass 工具中执行更新($set)查询?

c# - 如何将任意 json 对象发布到 webapi

mongodb - 使用 Mongoose、Node.js 和 Underscore 生成代码的简单