Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-16909

Unify ObjectIds and strings

    XMLWordPrintable

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Works as Designed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Internal Code
    • Labels:
      None

      Description

      I'm having an issue I think is likely faced by many many developers using mongo: two _id formats (hex string and ObjectId).

      The issue is described in both of these stackoverflow questions:
      http://stackoverflow.com/questions/23188490/best-practices-for-dealing-with-objectid-with-mongo-and-javascript
      http://stackoverflow.com/questions/27979012/best-ways-to-provide-a-very-open-ended-api-over-mongo-db-with-regards-to-objec

      I would like to suggest that mongo unify strings and ObjectIds. I am not suggesting that all _ids be strings. What I'm suggesting is that mongo convert any string that is a valid ObjectId representation to an ObjectId for storage, and on retrieval, convert any ObjectId to a string to pass to the end-user (client-side or server-side for the server-to-user part doesn't matter).

      This way you get a couple effects:

      • Users no longer have to manually convert between ObjectIds and their string representations when _ids need to be serialized.
      • Certain random strings that aren't intended to be ObjectIds get compressed for storage (not a problem, or much of a benefit)
      • There is a (negligible) cost of serializing and deserializing ObjectIds

      Currently, the only solution I have for my use-case is to have a large class of _ids referencing external objects (no primary keys tho) that are stored as strings rather than ObjectIds. This is obviously not ideal, which is why I'm suggesting a core feature for mongo.

        Attachments

          Activity

            People

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

              Dates

              • Created:
                Updated:
                Resolved: