javascript – 创建新的mongoose子文档时重复键错误

前端之家收集整理的这篇文章主要介绍了javascript – 创建新的mongoose子文档时重复键错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当创建新的文档,然后尝试提出一个新的子文档我得到这个错误
Object {error: "E11000 duplicate key error index: sales.users.$gro…p key:
        { : ObjectId('537b7788da19c4601d061d04') }"}
error: "E11000 duplicate key error index: sales.users.$groups.groupId_1
        dup key: { : ObjectId('537b7788da19c4601d061d04') }"
__proto__: Object

我试图插入的子文档被定义为子模式,它具有一个需要{unique:true},{sparse:true}的groupId字段.我正在使用的东西方法调用是:

User.findByIdAndUpdate(userId,{ $push: { 'groups': userUpdate} },function (err,obj) where userUpdate = { groupId: groupId }.

删除索引后,问题已解决,并且不再发生此错误.

var UserSchema = new Schema({
    email: {
        type: String,required: true,unique: true
    },active: {
        type: Boolean,default: true
    },username: {
        type: String,password: {
        salt: {
            type: String,required: true
        },hash: {
            type: String,required: true
        }
    },securityQuestion: {
        question: String,salt: String,hash: String
    },mobile: {
        PIN: Number,Number: Number
    },createDate: {
        type: Date,default: Date.now
    },updateDate: Date,lastLoginDate: Date,prevLoginDate: Date,passChangeDate: Date,locked: Boolean,lockDate: Date,FailedCount: Number,FailedDate: Date,profile: profile,preference: preference,courses: [UserCourseSchema],groups: [UserGroupSchema],rewards: [UserRewardSchema],roles: UserRoleSchema,scores: [UserscoreSchema]
});

var UserGroupSchema = new Schema({
    groupId: {
        type: Schema.Types.ObjectId,unique: true,sparse: true
    },joinDate: {
        type: Date,receiveNotifications: {
        type: Boolean,isAdmin: {
        type: Boolean,default: false
    },isOwner: {
        type: Boolean,isModerator: {
        type: Boolean,updateDate: Date
});

解决方法

如果您在对象数组上应用upsert,那么它将始终创建新文档,因为它不比较数组的子文档,并且在groupId上具有唯一的索引,因此不允许您创建具有相同值的新记录.为此,您应该找到该记录,如果存在,则更新它创建新记录.

另一个最好的方法是使用$addToSet.希望这可以帮助.

原文链接:https://www.f2er.com/js/153654.html

猜你在找的JavaScript相关文章