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?)

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Major - P3 Major - P3
    • None
    • None
    • None
    • None
    • 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

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: