我在Rails 4上使用MongoID和PostgreSQL,我有一个通知系统。
每个用户都有一个通知文档。我希望能够在控制器中将所有内容标记为。 这是我的通知架构:
{
"_id" : ObjectId("53e360156d6163513e000000"),
"unread_counter" : 1,
"user_id" : 1,
"rows" : [
{
"_id" : ObjectId("53e369166d61635328000000"),
"readed" : false,
"created_at" : ISODate("2014-08-07T11:55:02.936Z"),
"author" : {
"_id" : ObjectId("53e369166d61635328010000"),
"username" : "edouard",
"user_id" : 6
},
"subject" : {
"_id" : ObjectId("53e369166d61635328020000"),
"type" : "follower"
}
}
]
}
问题是elem_match
只匹配rows
数组中的一个元素。
Notification.where(:user_id => current_user.id)
.elem_match(rows: { readed: false })
.update_all("$set" => {"rows.$.readed" => true })
我受到这篇文章的启发:mongoid update elements within array
如何匹配所有"readed" : false
行元素,然后将其更新为true
?