У меня проблема с дублирующимся ключом. Долгое время не может найти ответ. Пожалуйста, помогите мне решить эту проблему или объяснить, почему я получаю повторяющуюся ключевую ошибку.Ошибка повторения ключа Mongoose с upsert
Trace: { [MongoError: E11000 duplicate key error collection: project.monitor index: _id_ dup key: { : 24392490 }]
name: 'MongoError',
message: 'E11000 duplicate key error collection: project.monitor index: _id_ dup key: { : 24392490 }',
driver: true,
index: 0,
code: 11000,
errmsg: 'E11000 duplicate key error collection: project.monitor index: _id_ dup key: { : 24392490 }' }
at /home/project/app/lib/monitor.js:67:12
at callback (/home/project/app/node_modules/mongoose/lib/query.js:2029:9)
at Immediate.<anonymous> (/home/project/app/node_modules/kareem/index.js:160:11)
at Immediate._onImmediate (/home/project/app/node_modules/mquery/lib/utils.js:137:16)
at processImmediate [as _immediateCallback] (timers.js:368:17)
но в мониторе я использую upsert, так почему я получаю дублирующую ошибку ??
monitor.js: 62-70
монитор схемы
var monitorSchema = db.Schema({
_id : {type: Number, default: utils.minute},
maxTicks : {type: Number, default: 0},
ticks : {type: Number, default: 0},
memory : {type: Number, default: 0},
cpu : {type: Number, default: 0},
reboot : {type: Number, default: 0},
streams : db.Schema.Types.Mixed
}, {
collection: 'monitor',
strict: false
});
индекс
monitorSchema.index({_id: -1});
Monitor = db.model('Monitor', monitorSchema);
и увеличение свойством
exports.increase = function (property, incr) {
var update = {};
update[property] = utils.parseRound(incr) || 1;
Monitor.update({_id: utils.minute()}, {$inc: update}, {upsert: true}, function (err) {
if (err) {
console.trace(err);
}
});
};
utils.js
exports.minute = function() {
return Math.round(Date.now()/60000);
};
exports.parseRound = function (num, round) {
if (isNaN(num)) return 0;
return Number(parseFloat(Number(num)).toFixed(round));
};
Не пытаться управлять «_id» по своему усмотрению, если это не очень очень надо ... –
В моей задаче это очень и очень необходимо. – cheks
Никто не знает, почему я получаю эту ошибку? – cheks