Upsert:无法使尚未添加到数组的子文档无效

时间:2015-10-21 23:49:38

标签: javascript node.js mongoose

我在mongoose中有一个 upsert 查询,这个查询在3.8中有效,但在我升级到4后我得到了

Unable to invalidate a subdocument that has not been added to an array

这是我的模特:

var ActivitySchema = new Schema({
    owner:{
        type: Schema.Types.ObjectId, 
        ref: 'User'
    },
    sequence:{
        type:Number,
        default: 0
    },
    items:[
        {
            posted:{
                type:Date,
                default:Date.now
            },
            verb:{
                type: String,
                enum: [ 'leave','join','support','share','comment', 'upload', 'rate','message','update', 'signup']
            },
            text:{
                type: String,
            },
            reference: {
                objectType:{
                    type: String,
                    enum: [ 'document','element','process', 'project', 'user']
                },
                refObj:{}
            }
        }]
});

upsert:

Activity.update({
        $and:[
            {'owner':ownerId},
            {'sequence':bucket}
        ]},
        {
            $push:{items:newItem }
        },
        {
            upsert:true
        }).execAsync();

,数据如下:

//newItem
{ verb: 'join',
  text: 'Has joined to a team',
  reference: 
   { 
     refObj: { teamId: '56269fd1e923cc7a7b46dcf8', name: 'test1' },
     objectType: 'user' 
   } 
}

ownerId是一个类似56251c01507dc35423694118的mongoId 和bucket是一个整数0

是否有任何需要注意的改变?我一直在寻找,我还没有找到相关的,任何其他解决方案,解决方案?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,如果情况相同,请确保所有字段类型都与mongoose.model('yourModel')匹配。 希望有所帮助。