You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mongoose-auto-increment插件报错:Model.findOne()不再接受回调

解决Mongoose-auto-increment插件与新版Mongoose兼容问题

问题背景

在Node.js项目中尝试用mongoose-auto-increment插件为userSchema实现自增ID功能,代码如下:

import mongoose from "mongoose";
import autoIncrement from "mongoose-auto-increment";

const userSchema = mongoose.Schema({
    name: String,
    username: String,
    email: String,
    phone: String
})

autoIncrement.initialize(mongoose.connection);
userSchema.plugin(autoIncrement.plugin, 'user'); // 启用该行触发错误
const user = mongoose.model('user', userSchema);

export default user;

启用插件行后抛出错误:

MongooseError: Model.findOne() no longer accepts a callback
    at Function.findOne (D:\personal project\rough\CRUD\server\node_modules\mongoose\lib\model.js:2129:11)
    at exports.plugin (D:\personal project\rough\CRUD\server\node_modules\mongoose-auto-increment\index.js:73:19)      
    at Schema.plugin (D:\personal project\rough\CRUD\server\node_modules\mongoose\lib\schema.js:1884:3)
    at file:///D:/personal%20project/rough/CRUD/server/schema/user-schema.js:12:12
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

Node.js v19.1.0
[nodemon] app crashed - waiting for file changes before starting...

问题原因

mongoose-auto-increment插件已多年未维护,内部使用了旧版Mongoose的回调式Model.findOne()调用,而新版Mongoose(v7及以上)已彻底移除了对回调参数的支持,导致兼容性报错。

解决方案

方案一:降级Mongoose到兼容版本

将Mongoose降级至v6.x系列(该版本仍支持回调作为可选参数):

  1. 卸载当前Mongoose:
npm uninstall mongoose
  1. 安装指定兼容版本(以v6.12.0为例):
npm install mongoose@6.12.0

执行完成后,原有代码无需修改即可正常运行。

方案二:使用维护活跃的替代插件mongoose-sequence

mongoose-sequence是目前维护状态良好的自增插件,支持新版Mongoose:

  1. 安装插件:
npm install mongoose-sequence
  1. 修改代码替换原插件逻辑:
import mongoose from "mongoose";
import mongooseSequence from 'mongoose-sequence';

const userSchema = mongoose.Schema({
    name: String,
    username: String,
    email: String,
    phone: String
})

const incrementPlugin = mongooseSequence(mongoose);
// 配置自增字段为'id',计数器集合名为'user_counter'
userSchema.plugin(incrementPlugin, { inc_field: 'id', id: 'user_counter' });

const user = mongoose.model('user', userSchema);

export default user;
  • inc_field:指定要生成自增值的字段名(可自定义,比如改为'userId')
  • id:计数器存储的集合名称,用于记录当前自增数值

内容的提问来源于stack exchange,提问作者Bashishtha Kannaujiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:47:37