当前位置: 首页 > 面试题库 >

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

子车安和
2023-03-14
问题内容

我试图通过对数据库中的文档进行计数,并使用该数字来创建_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' }

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


问题答案:

您要么需要将该_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 });


 类似资料:
  • 我有一个简单的模式,里面有一个数组。当我创建一个包含映射数组中的项的新项时,映射数组中的项会自动分配_ID。但是,当我试图将项添加到现有项的映射数组时,新的映射是用的_id创建的。我如何让mongoose为我生成这个_ID?我在文件里找不到。

  • 我创建一篇文章。 宇宙数据库设置其 我将其设置为<-how?

  • Cosmos存储过程将每个记录的PumperID字段设置为默认值会是什么样子? 我们需要这样做来修复一些数据,因此该过程将访问每个具有PumperID字段的记录(并非所有文档都有此字段),并将其设置为默认值。

  • 问题内容: 这是我用来连接数据库的代码: 今天,我将Mongoose更新到版本4.11.0,并且在运行测试时收到此警告: 我找不到有关如何“设置useMongoClient”的任何信息。 你们知道怎么做吗? 问题答案: 没有Typescript, 您几乎可以忽略该问题并使用。 如果您确实想避免出现警告,请避免使用4.11.0版本。 我更新到4.11.1版本,因为@类型/猫鼬@尚未进行更新4.7.1

  • 问题内容: 我正在使用Spring 3.1.1.RELEASE,Hibernate 4.1.0.Final和JPA 2.0。有没有一种方法可以配置Spring事务以在不使用Java代码的情况下执行事务后提交?换句话说,我想将刷新模式设置为在应用程序上下文文件,hibernate配置文件或persistence.xml文件中提交。我的Spring交易服务类看起来像 我的应用程序上下文设置如下: 我的

  • 问题内容: 我想将配置文件名称设置为整个程序包,但我不知道如何。如果在哪里不是简单的方法,那么我必须用注释标记包和子包中的每个类。 标签不支持这样的属性,所以我不知道。 问题答案: 您可以将个人资料设置为: 文件-用于xml配置 Java配置类 在它们的每一个中,您都可以对特定的软件包使用组件扫描。