使用node-uuid时使用Mongoose dup键

时间:2014-12-29 16:24:56

标签: node.js mongoose

为什么在将Mongoose架构的_id设置为函数时会遇到“dup key”错误?...

var mongoose = require('mongoose'),
    uuid = require('node-uuid');

var testSchema = new mongoose.Schema({
    _id: { type: String, default: uuid.v1() },
    name: { type: String, required: true, trim: true },
});

var test = mongoose.model('Test', testSchema);

module.exports = test;

而且,我每次尝试新建一个测试模型......

var testA = new Test({
    name: 'test A'
});
testA.save(function(err, testA){
    if (err) {
        console.log('Failure saving test A: ' + err);
    } else {
        // Do something
    }
});

var testB = new Test({
    name: 'test B'
});
testB.save(function(err, testB){
    if (err) {
        console.log('Failure saving test B: ' + err);
    } else {
        // Do something
    }
});

尝试为我的数据库设定种子时,每次尝试创建多个文档时,我都会在任何集合上遇到重复的_id值。即使嵌套单个文档也会保存在先前失败的回调中。

我假设每次新建一个实例时都会调用该函数。

1 个答案:

答案 0 :(得分:3)

这是因为uuid.v1()实际上返回一个字符串,因此您将默认值设置为相同的uuid。相反,传递函数:uuid.v1(没有括号)。