質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

2098閲覧

Mongoidでkeyにドットが含まれるjson形式のデータを格納する際にエラーが発生する

ykomuro0719

総合スコア7

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/10/23 12:13

###前提・実現したいこと
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 どなたかわかる方、ご教授ください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

MongoDB 2.6以降では、ドットが含まれたり、$で始まるフィールド名は使用不可となりました。

https://docs.mongodb.com/master/release-notes/2.6-compatibility/#updates-enforce-field-name-restrictions

Updates no longer support saving field names that contain a dot (.) or a field name that starts with a dollar sign ($).

投稿2018/11/26 14:35

kabao

総合スコア648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問