Uploaded image for project: 'Drivers'
  1. Drivers
  2. DRIVERS-151

Handle Bulk API edge case for pre-2.6 servers when upserted _id not returned

    XMLWordPrintable

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Security Level: Public
    • Labels:
      None
    • # Replies:
      1
    • Last comment by Customer:
      false

      Description

      Server versions before 2.6 only return the 'upserted' field in an update result when the upserted _id is an ObjectId. If the user provides any other value for _id in the query spec, or update document (for a replace operation) the upserted field is not returned. This causes invalid counts for nUpserted in the Bulk API result set.

      The purpose of this ticket is to work around the issue in all drivers.

      In all of these examples the server upserts a new document but does not return the _id of the document inserted:

      >>> db.test.count()
      0
      >>> db.test.update({'_id': 0}, {'$set': {'a': 0}}, upsert=True)
      {u'updatedExisting': False, u'connectionId': 1, u'ok': 1.0, u'err': None, u'n': 1}
      >>> db.test.find_one({'_id': 0})
      {u'a': 0, u'_id': 0}
      >>> db.test.update({'a': 1}, {'_id': 1}, upsert=True)
      {u'updatedExisting': False, u'connectionId': 1, u'ok': 1.0, u'err': None, u'n': 1}
      >>> db.test.find_one({'_id': 1})
      {u'_id': 1}
      >>> db.test.update({'_id': 3}, {'_id': 2}, upsert=True)
      {u'updatedExisting': False, u'connectionId': 1, u'ok': 1.0, u'err': None, u'n': 1}
      >>> db.test.find_one({'_id': 2})
      {u'_id': 2}
      >>> c.server_info()['version']
      u'2.4.10'

      There is a code review for the workaround in python here:
      http://codereview.10gen.com/5468598634020864/

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              barrie Barrie Segal
              Reporter:
              jeff.yemin Jeffrey Yemin
              Participants:
              Last commenter:
              Ian Whalen Ian Whalen
              Votes:
              0 Vote for this issue
              Watchers:
              11 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:
                Days since reply:
                6 years, 7 weeks ago
                Date of 1st Reply: