Uploaded image for project: 'Python Driver'
  1. Python Driver
  2. PYTHON-1932

replace_one does not validate keys for dots

    • Type: Icon: Bug Bug
    • Resolution: Won't Fix
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None

      >>> coll = client.t.t
      >>> coll.drop()
      >>> coll.insert_one({'a':{'b':1}})
      <pymongo.results.InsertOneResult object at 0x105d3b648>
      >>> coll.replace_one({'a.b': 1}, {'a':{'b':1}, 'dot.field': 1})
      <pymongo.results.UpdateResult object at 0x105d3bec8>
      >>> coll.find_one()
      {'_id': ObjectId('5d44b3f721304a61efd54702'), 'a': {'b': 1}, 'dot.field': 1}
      

      The expected behavior should be a client side validation error, like this:

      >>> coll.insert_one({'dot.field': 2})
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/collection.py", line 693, in insert_one
          session=session),
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/collection.py", line 607, in _insert
          bypass_doc_val, session)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/collection.py", line 595, in _insert_one
          acknowledged, _insert_command, session)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/mongo_client.py", line 1243, in _retryable_write
          return self._retry_with_session(retryable, func, s, None)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/mongo_client.py", line 1196, in _retry_with_session
          return func(session, sock_info, retryable)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/collection.py", line 590, in _insert_command
          retryable_write=retryable_write)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/pool.py", line 584, in command
          self._raise_connection_failure(error)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/pool.py", line 745, in _raise_connection_failure
          raise error
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/pool.py", line 579, in command
          unacknowledged=unacknowledged)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/network.py", line 114, in command
          codec_options, ctx=compression_ctx)
        File "/Users/shane/Library/Python/3.7/lib/python/site-packages/pymongo/message.py", line 679, in _op_msg
          flags, command, identifier, docs, check_keys, opts)
      bson.errors.InvalidDocument: key 'dot.field' must not contain '.'
      

            Assignee:
            bernie@mongodb.com Bernie Hackett
            Reporter:
            shane.harvey@mongodb.com Shane Harvey
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: