Uploaded image for project: 'Mongoid'
  1. Mongoid
  2. MONGOID-4243

Document Key Validation

    XMLWordPrintable

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: 5.0.2
    • Fix Version/s: 6.0.0
    • Component/s: None
    • Labels:
      None
    • Sprint:
      Ruby Sprint 33, Ruby Sprint 34, Ruby Sprint 35, Ruby Sprint 36, Ruby Sprint 37, Ruby Sprint 38, Ruby Sprint 39, Ruby Sprint 40

      Description

      Hash fields don't validate their keys allowing invalid keys into the database and causing an error to be thrown on updates.

      class Example
        include Mongoid::Document
       
        field :test, type: Hash
      end
       
      e = Example.create!(test: { "bad.1" => "bad key" })
      #=> #<Example _id: 56ce62a86572697d57000000, test: {"bad.1"=>"bad key"}>
      e.save!
      #=> true
      e.test.merge!("bad.2" => "bad key")
      e.save
      Mongo::Error::OperationFailure: The dotted field 'bad.1' in 'test.bad.1' is not valid for storage. (57)
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/operation/result.rb:226:in `validate!'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/operation/write/write_command_enabled.rb:48:in `execute_write_command'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/operation/write/write_command_enabled.rb:38:in `execute'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/collection/view/writable.rb:193:in `block in update'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/retryable.rb:84:in `call'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/retryable.rb:84:in `write_with_retry'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/collection/view/writable.rb:184:in `update'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongo-2.1.2/lib/mongo/collection/view/writable.rb:167:in `update_one'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongoid-5.0.2/lib/mongoid/query_cache.rb:168:in `update_one_with_clear_cache'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongoid-5.0.2/lib/mongoid/persistable/updatable.rb:144:in `block in update_document'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/mongoid-5.0.2/lib/mongoid/persistable/updatable.rb:118:in `block (2 levels) in prepare_update'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:117:in `call'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:117:in `call'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:505:in `call'
              from /.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:505:in `call'
      ... 4 levels...
      

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: