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

Collection options with value of BSON 'undefined' are translated to Javascript null (in the shell?)

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Duplicate
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None
    • Operating System:
      ALL

      Description

      The system.namespaces collection refer to collections with options with BSON 'undefined' values, which are translated to Javascript null. This can be confusing if you're querying using the $type operator. For example,

      MongoDB shell version: 2.4.3
      connecting to: 127.0.0.1:20000/test
      > db.version()
      2.4.3
      > db.testingnull.insert({"somefield":"hello", sub:{"sub1": null}})
      > db.testingnull.find({"sub.sub1":{$type:10}})
      { "_id" : ObjectId("519f9fdb9fe8e90bd386d522"), "somefield" : "hello", "sub" : { "sub1" : null } }
      > db.createCollection("test")
      { "ok" : 1 }
      > db.createCollection("test2")
      { "ok" : 1 }
      >  db.system.namespaces.find({"options.create":{$type:2}})
      { "name" : "test.test", "options" : { "create" : "test", "capped" : null, "size" : null } }
      { "name" : "test.test2", "options" : { "create" : "test2", "capped" : null, "size" : null } }
      > db.system.namespaces.find({"options.capped":{$type:10}})
      > db.test.drop()
      true
      > db.test2.drop()
      true
      > db.system.namespaces.find({"options.capped":{$type:10}})
      > db.createCollection("test",{capped:null})
      { "ok" : 1 }
      > db.createCollection("test2",{capped:null})
      { "ok" : 1 }
      > db.system.namespaces.find({"options.create":{$type:2}})
      { "name" : "test.test", "options" : { "create" : "test", "capped" : null, "size" : null } }
      { "name" : "test.test2", "options" : { "create" : "test2", "capped" : null, "size" : null } }
      > db.system.namespaces.find({"options.capped":{$type:10}})
      { "name" : "test.test", "options" : { "create" : "test", "capped" : null, "size" : null } }
      { "name" : "test.test2", "options" : { "create" : "test2", "capped" : null, "size" : null } }

      As the Javascript interpreter does have an "undefined" type, the "capped" collection option should probably not translate the underlying "undefined" value to null.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              Unassigned Unassigned
              Reporter:
              stephen.lee Stephen Lee
              Participants:
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: