###前提・実現したいこと
Mongoidでkeyにドットが含まれる階層構造のJsonデータを格納したい
###発生している問題・エラーメッセージ
Mongoidを利用してRailsに複数階層ネストしたJsonデータを格納しようと考え、
下記の形で設定しbundle exec rails db:seedを実施するとエラーが発生します。
```b $ bundle exec rails db:seed rails aborted! BSON::String::IllegalKey: '127.0.0.1' is an illegal key in MongoDB. Keys may not start with '$' or contain a '.'. /es-webui/vender/bundle/ruby/2.3.0/gems/bson-4.3.0.beta/lib/bson/hash.rb:42:in `put_hash' /es-webui/vender/bundle/ruby/2.3.0/gems/bson-4.3.0.beta/lib/bson/hash.rb:42:in `to_bson' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/protocol/serializers.rb:326:in `serialize' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/protocol/message.rb:241:in `block in serialize_fields' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/protocol/message.rb:229:in `each' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/protocol/message.rb:229:in `serialize_fields' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/protocol/message.rb:125:in `serialize' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server/connection.rb:229:in `block in write' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server/connection.rb:228:in `each' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server/connection.rb:228:in `write' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server/connection.rb:195:in `deliver' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server/connection.rb:126:in `block in dispatch' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/monitoring/publishable.rb:47:in `publish_command' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server/connection.rb:125:in `dispatch' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/operation/write/command/writable.rb:40:in `block in execute' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server/connection_pool.rb:107:in `with_connection' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/server.rb:250:in `with_connection' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/operation/write/command/writable.rb:39:in `execute' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/operation/write/insert.rb:55:in `execute_write_command' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/operation/write/write_command_enabled.rb:50:in `execute' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/collection.rb:430:in `block (2 levels) in insert_one' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/retryable.rb:106:in `write_with_retry' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/collection.rb:420:in `block in insert_one' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/client.rb:449:in `with_session' /es-webui/vender/bundle/ruby/2.3.0/gems/mongo-2.5.0.beta/lib/mongo/collection.rb:419:in `insert_one' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/query_cache.rb:182:in `insert_one_with_clear_cache' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:79:in `insert_as_root' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:27:in `block in insert' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:118:in `block (2 levels) in prepare_insert' /es-webui/vender/bundle/ruby/2.3.0/gems/activesupport-5.1.4/lib/active_support/callbacks.rb:131:in `run_callbacks' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/interceptable.rb:132:in `run_callbacks' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:117:in `block in prepare_insert' /es-webui/vender/bundle/ruby/2.3.0/gems/activesupport-5.1.4/lib/active_support/callbacks.rb:97:in `run_callbacks' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/interceptable.rb:132:in `run_callbacks' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:116:in `prepare_insert' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:23:in `insert' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/savable.rb:23:in `save' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:149:in `block in create' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/threaded/lifecycle.rb:161:in `_creating' /es-webui/vender/bundle/ruby/2.3.0/gems/mongoid-7.0.0.beta/lib/mongoid/persistable/creatable.rb:144:in `create' /es-webui/db/seeds.rb:19:in `block in <top (required)>' /es-webui/db/seeds.rb:16:in `each' /es-webui/db/seeds.rb:16:in `<top (required)>' /es-webui/vender/bundle/ruby/2.3.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `load' /es-webui/vender/bundle/ruby/2.3.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `block in load' /es-webui/vender/bundle/ruby/2.3.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:258:in `load_dependency' /es-webui/vender/bundle/ruby/2.3.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `load' /es-webui/vender/bundle/ruby/2.3.0/gems/railties-5.1.4/lib/rails/engine.rb:549:in `load_seed' /es-webui/vender/bundle/ruby/2.3.0/gems/activerecord-5.1.4/lib/active_record/tasks/database_tasks.rb:270:in `load_seed' /es-webui/vender/bundle/ruby/2.3.0/gems/activerecord-5.1.4/lib/active_record/railties/databases.rake:184:in `block (2 levels) in <top (required)>' /es-webui/vender/bundle/ruby/2.3.0/gems/railties-5.1.4/lib/rails/commands/rake/rake_command.rb:21:in `block in perform' /es-webui/vender/bundle/ruby/2.3.0/gems/railties-5.1.4/lib/rails/commands/rake/rake_command.rb:18:in `perform' /es-webui/vender/bundle/ruby/2.3.0/gems/railties-5.1.4/lib/rails/command.rb:46:in `invoke' /es-webui/vender/bundle/ruby/2.3.0/gems/railties-5.1.4/lib/rails/commands.rb:16:in `<top (required)>' bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:seed (See full trace by running task with --trace)
###該当のソースコード ruby #db/seed.rb list = [ "aaa001", "aaa002", "aaa003", "aaa004", "aaa005" ] list.each do |l| json_path = "db/testdata/#{l}.json" json = ActiveSupport::JSON.decode(File.read(json_path)) Node.create(name: l,snj: json) end #models/node.rb class Node include Mongoid::Document include Mongoid::Timestamps field :name, type: String field :snj, type: Hash end #a001.json { "name": "aaa001", ・・・ "automatic": { "network": { "interfaces": { "eth0": { "addresses": { "06:21:E3:AA:8F:10": { "family": "lladdr" }, ・・・
###試したこと ・Web上で検索すると以下の情報がありました https://jira.mongodb.org/browse/RUBY-1167 Mongoid内部で利用しているMongo gemが2.3.0の場合、似たようなエラーが発生するとの記載はありますが 、2.3.1で修正されているとのことです。 ・mongoidのバージョンアップ(6.2.1→7.0.0beta) ・mongoのバージョンアップ(2.4.3→2.5.0beta) ・bsonのバージョンアップ(4.2.2→4.3.0beta) 上記リンクの回避策となるmongo gemを2.3.0より低いバージョンにする手法は、Railsのバージョンとの兼ね合いで 難しいとの判断です また、railsコンソールから直に登録しようと試みても同様のエラーが発生しました ###補足情報(言語/FW/ツール等のバージョンなど) ruby 2.3.1 rails 5.1.4 mongoid 6.2.1→7.0.0beta mongo 2.4.3→2.5.0beta mongoDB 3.4.9 どなたかわかる方、ご教授ください
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。