2016-12-19 4 views
0

は、以下の構造を持つ文書を持って:私はread要素が0に等しい読んですべての通知としてマークしようとしていますが、何らかの理由で、私のコードは、最初の通知修正マングース:マルチ:投影更新のための真は働かない?

{ 
    _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 } 
    }] 
} 

mongoose.model('User').update({ _id: user_id, 'notifications.read': 0 }, { $set: { 'notifications.$.read': 1 }}, { multi: true }); 

私は正しくmulti: trueを使用していますか?

UPDATE

私は私が何をしようとしていると言うだろうドキュメントが言うようにするので、placeholderを使用しても意味がありません。

$を。更新のクエリ条件に一致する最初の要素を更新するためのプレースホルダとして機能します。

答えて

0

{ _id: user_id, 'notifications.read': 0 }これを使用してドキュメントを更新すると、_idでクエリしているため、1つのドキュメントのみが検索されます。

代わりに{'notifications.read': 0 }を使用してください。

+0

あなたが '_id:user_id'を削除しても、それは私に最初の通知を更新し続けます – DevStarlight

+0

' multi:true'を使用して 'notifications'サブドキュメントまたはメインドキュメントを更新していますか? –

+0

私は説明で指定したとおり、 'read'属性が0であるすべてのサブ文書を更新しようとしています – DevStarlight

関連する問題