我在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
是否有任何需要注意的改变?我一直在寻找,我还没有找到相关的,任何其他解决方案,解决方案?
答案 0 :(得分:1)
我遇到了同样的问题,如果情况相同,请确保所有字段类型都与mongoose.model('yourModel')
匹配。
希望有所帮助。