我正在编写一个读取mongo oplog并将记录复制到sql表的脚本。我面临的问题是我无法从mongo完全获得ruby的反序列化。
例如,这是来自oplog的bson记录
... "o" : {"interval":{"start":"tue 21 2011","end":"wed 22 2011"}}
现在我能够做到
doc["o"]["interval"]
我得到了
starttue 21 2011 endwed 22 2011
但如果我这样做
doc["o"]["interval"]["start"] or doc["o"]["interval"]["end"]
我收到错误
mongo_reader.rb:48:in `ReadCollection': undefined method `[]' for nil:NilClass (NoMethodError)
那么如何访问集合的内部元素呢?
#<BSON::OrderedHash:0x23103e4 {
"ts" => #<BSON::Timestamp:0x4620708 @increment=2, @seconds=1320984261>,
"op" => "u",
"ns" => "devices.d4d8ff6cb092541a5746eafd3.colletio",
"o2" => #<BSON::OrderedHash:0x2310300 {
"_id" => BSON::ObjectId('4ebc9ebd0925ec7cc70d273f')
}>,
"o" => #<BSON::OrderedHash:0x231027c {
"$set" => #<BSON::OrderedHash:0x2310240 {
"interval" =>
#<BSON::OrderedHash:0x2310210 {
"start" => Fri Nov 11 04:04:13 UTC 2011,
"end" => Fri Nov 11 04:04:16 UTC 2011
}>,
"classification" =>
#<BSON::OrderedHash:0x2310180 {
"activity" => "Handling",
"entity" => "Workpiece",
"isPlanned" => true,
"confidence" => 0,
"source" => "4ebbf18a0925ec7cc6ebdb78"
}>,
"parts" => nil
}>
}>
}>