一尘不染

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

node.js

我试图通过对数据库中的文档进行计数,并使用该数字来创建_id(假设第一个_id为0)来为我的Mongoose模型动态创建_id。但是,我无法从值中设置_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' }

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


阅读 230

收藏
2020-07-07

共1个答案

一尘不染

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

所以这:

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 });
2020-07-07