すべてのメッセージを 'jim' の既読としてマークしたいと思います。スレッドの構造は次のとおりです。
db.threads.save({
messages: [
{
read_by: ['bob', 'jim']
},
{
read_by: ['bob']
},
{
read_by: ['bob']
}
]
})
ご覧のとおり、1 つのメッセージは既に 'jim' によって読まれており、残りは 'bob' だけが読んでいます。read_by
「jim」が配列に追加されるように、埋め込まれたドキュメントを見つけて変更したいと思います。
これが私が得た場所です:
db.threads.findAndModify({
query: {
'messages.read_by': {
$ne: 'jim'
}
},
update: {
$push: {
'messages.$.read_by': 'jim'
}
}
})
次のエラーが表示されます。
キャッチされない例外: findAndModifyFailed が失敗しました: 「文字列フィールド名 [$] を使用して配列に追加できません」
クエリは a で機能するdb.threads.find()
ため、問題は呼び出しの更新部分にあると思いfindAndModify()
ます。