拥有具有以下结构的文档:
{
_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Story' },
notifications: [{
story: {
_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Story' },
video_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Video' }
},
video: {
_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Video' },
video_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Video' }
},
type: { type: String },
read: { type: Number, default: 0 }, // 0 - Unread, 1 - read
ts: { type: Date, default: Date.now }
}]
}
我试图将read
元素等于0的所有通知标记为已读,但出于任何原因,我的代码仅修改了第一个通知:
mongoose.model('User').update({ _id: user_id, 'notifications.read': 0 }, { $set: { 'notifications.$.read': 1 }}, { multi: true });
我是否正确使用multi: true
?
更新
我说我想做什么,使用placeholder没有任何意义,因为正如文档所说:
$。充当占位符以更新与更新中的查询条件匹配的第一个元素。
答案 0 :(得分:0)
当您使用{ _id: user_id, 'notifications.read': 0 }
来更新文档时,它只会找到一个文档,因为您正在_id
查询。
您应该使用{'notifications.read': 0 }
代替。