将mongo json文档反序列化为ruby

时间:2011-11-14 11:05:56

标签: ruby serialization mongodb deserialization

我正在编写一个读取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
             }>
         }>
}>

0 个答案:

没有答案