我有以下 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。