次の MongoDB/Mongoid ドキュメントがあります。
#<Event
_id: 51e406a91d41c89fa2000002,
namespace: :namespace,
bucket: "order_created",
data: {
"order"=>{
"id"=>100,
"deleted_at"=>nil,
"created_at"=>2011-10-06 15:45:04 UTC,
"updated_at"=>2013-07-10 16:37:07 UTC,
"completed_at"=>2013-07-10 16:37:07 UTC
}
}>
イベント クラスの定義は次のとおりです。
class Event
include Mongoid::Document
field :namespace, type: Symbol
field :bucket, type: String
field :data, type: Hash
end
Mongoid でfind_and_modify メソッドを使用して検索および更新したいのですが、データ フィールドを適切に検索するための検索条件を適切に構成する方法がわかりません。
具体的には、 を見つけたいですdata.order.id = 100
。私は運がないので、次のことを試しました:
Event.where(:data.order.id => 100)
Event.where(:'data["order"]["id"]' => 100)
Event.where( { data: { order: { id: 100 } } } )
Event.where( { data: { :"order" => { :"id" => 100 } } }
後者は nil を返しますが、前者 (そして、私が読んだドキュメントから、それを行う正しい方法) はSyntaxError: unexpected ':'
.
これは、Mongoid 3.1.4 および MongoDB 2.4.5 で発生します。