node.js - Mongoose 模型中自动递增数字字段

标签 node.js mongodb mongoose auto-increment

我的网站使用 MySql DB,现在将其更新为 MongoDB。某些表中的列会自动递增,我想确保同样的情况继续发生。

以下是我迄今为止的发现,但没有一个有效。

使用mongoose-auto-increment插件

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    autoIncrement = require('mongoose-auto-increment');
 
var connection = mongoose.createConnection("mongodb://localhost/myDatabase");
 
autoIncrement.initialize(connection);

EmborderSchema.plugin(autoIncrement.plugin, {
  model: 'Emborder',
  field: 'emborder_id',
  startAt: 28855,
  incrementBy: 1
});

使用预保存 Hook :

EmborderSchema.pre('save', function (next) {
  if (this.emborder_id == undefined) {
    Emborder.findOne({})
      .sort({emborder_id: -1})
      .exec(function (err, data) {
        this.emborder_id = data.emborder_id + 1;
        next();
      })
  } else {
    next();
  }
});

使用第一种方法会出现错误

E11000 duplicate key error collection: 24hd.24hd_emborder index: emborder_id_1 dup key: { 23345 }

第二种方法出现此错误

E11000 duplicate key error collection: 24hd.24hd_emborder index: emborder_id_1 dup key: { : null }

注意:emborder_id 是我的旧 Mysql 数据库中的主键,在此代码中,当我添加新记录时,emborder_id 的值未定义。

请帮我找出这个方法出了什么问题。

最佳答案

我会向您推荐第二种方法。

EmborderSchema.pre('save', function (next) {
  var self = this;
  if (self.emborder_id == undefined) {
    Emborder.findOne({})
      .sort({emborder_id: -1})
      .exec(function (err, data) {
        if(!data.emborder_id){
         self.emborder_id = 1;
         next();
        }else{
          self.emborder_id = data.emborder_id + 1;
          next();
        }
      })
    next();
  }
});

有关更多信息,您可以阅读有关 javascript 中的 Context 的内容。

例如,在函数内部,当您说:“this.accoutNumber”时,您指的是属性“accoutNumber”,该属性属于正在执行该函数的对象。

如果对象“foo”有一个名为“bar”的方法,则当在“bar”内部使用JavaScript关键字“this”时,它引用“foo”。如果函数“bar”在全局范围内执行,则“this”指的是窗口对象。

上下文示例取自 --> https://blog.kevinchisholm.com/javascript/difference-between-scope-and-context/

关于node.js - Mongoose 模型中自动递增数字字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48249854/

相关文章:

Node.js Easyrtc 在 Heroku 上部署失败

mongodb - 在 Mongo 服务器端 javascript 中输出到控制台

java - 使用 Java 从 mongodb 中检索数组值

node.js - 如何在一次更新 MongoDB 中进行 $set 和 $push?

node.js - Mongoose orderby 不工作

mongodb - 未在ElasticSearch中添加Mongo '_id'字段

node.js - 为 Node.js 应用程序创建用户友好的安装程序

node.js - 如何在我自己的服务器上托管 gatsby(例如 Express)并在我需要时构建网站

node.js - Mongoose 架构可选字段

mongodb - 使用Docker和Luster挂载的驱动器上的MongoDB “Unable to establish lock”错误