首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫鼬dup键

猫鼬dup键
EN

Stack Overflow用户
提问于 2016-08-02 13:54:29
回答 2查看 226关注 0票数 0

我得到了一个重复的键错误,但不确定原因。

我有以下模式:

代码语言:javascript
复制
var walletSchema = mongoose.Schema({
    currencyName : {type : String, required : true, unique : true},
    amount : {type : Number, default : 0}
}, {strict : false});

// define the schema for our user model
var userSchema = mongoose.Schema({
    local : {
        username    : { type: String, required: true, unique: true },
        password    : { type: String, required: true, unique : true },
        email       : { type: String, required: true, unique: true },
        country     : { type: String, required: true },
        inventory   : {
            food : { type : Number, default : 0},
            energyDrinks : { type : Number, default : 0 }
        },
        wallet : [walletSchema],
        lastAttackedAt : { type: Date, default: Date.now },
        lastJobChange : {type: Date, default: '03/30/1988' },
        lastWorked : {type: Date},
        referredBy : {type : String, default : 'Admin'},
        energy      : { type: Number, default: 100 },
        energyUpdatedAt : { type : Date, default: Date.now },
        resetPasswordToken: String,
        resetPasswordExpires: Date
    }
},{timestamps : true});

我用以下代码创建了一个新用户:

代码语言:javascript
复制
...
newUser.local.username = capitalizeUser(username);
newUser.local.password = newUser.generateHash(password);
newUser.local.email = req.body.email;
newUser.local.country = req.body.country;
newUser.local.wallet.push({
        // Create the default currencies
        currencyName: 'Euro',
    }, {
        currencyName: 'Gold',
    }, {
        currencyName: result.countryCurrency
    }

);
// save the user
newUser.save(function(err) {
    if (err)
        throw err;
    return done(null, newUser);
});

但是,对于第一个用户来说,一切都很好,但是,如果我试图让另一个用户使用,我就会得到MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: xyz.users.$local.wallet.currencyName_1 dup key: { : "Euro" }

为什么会发生这种情况,难道不是每个用户都有自己的wallet吗?我应该如何处理它,请记住,大约有230种货币可供每个用户使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-02 13:58:24

代码语言:javascript
复制
currencyName : {type : String, required : true}

删除独特的从那里,你将是很好的去。孟子检查唯一的钥匙收集。在您的例子中,walletSchema集合将有很多相同的值,所以这就是它产生错误的原因。

票数 1
EN

Stack Overflow用户

发布于 2016-08-02 14:24:21

由于您的currencyName被设置为唯一的,所以它必须针对您保存的每个用户不同。实际上,如果使用此模式,您甚至无法拥有来自同一个国家的两个用户。

因此,为了避免这种情况,您需要从模式中删除唯一关键字,然后就完成了。然后它看起来就像这样。

代码语言:javascript
复制
var walletSchema = mongoose.Schema({
    currencyName : {type : String, required : true},
    amount : {type : Number, default : 0}
}, {strict : false});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38722459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档