我的网站使用MySql DB,现在更新到MongoDB。有些表中的列会自动增加,我想确保这种情况继续下去。
以下是我到目前为止的发现,但没有一个是工作。
使用** Mongoose 自动增量**插件
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
});
使用预保存挂钩:
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重复键错误收集:24hd.24hd_emborder索引:emborder_id_1重复密钥:小行星23345
第二种方法产生此错误
E11000重复键错误收集:24hd.24hd_emborder索引:emborder_id_1重复密钥:{:空}
注意:emborder_id是我以前的Mysql数据库中的主键,在这个代码中,emborder_id的值是未定义的,因为我正在添加一个新记录。
请帮助我找出这个方法中的错误。
1条答案
按热度按时间noj0wjuj1#
我会向你推荐第二种方法。
要了解更多信息,你可以阅读javascript中的
Context
。例如,在函数内部,当您说:“this.accoutNumber”,您正在引用属性“accoutNumber”,该属性属于正在其中执行函数的对象。
如果对象“foo”有一个名为“bar”的方法,当JavaScript关键字“this”在“bar”中使用时,它指的是“foo”。如果函数“bar”在全局作用域中执行,则“this”指的是窗口对象。
上下文示例取自--〉https://blog.kevinchisholm.com/javascript/difference-between-scope-and-context/