MongoID:匹配数组中的多个元素并更新所有元素

时间:2014-08-07 19:28:10

标签: ruby-on-rails ruby mongodb mongoid

我在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

0 个答案:

没有答案