Uploaded image for project: 'PHP Driver: Extension'
  1. PHP Driver: Extension
  2. PHPC-267

_id generated on embedded document

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • 0.5.1
    • Affects Version/s: 0.5.0
    • Component/s: None
    • None

      _id are generated erroneously not only on the top-level document, but also embedded documents.

      --TEST--
      _id should only be generated for top-level document, not embedded docs
      --SKIPIF--
      <?php require __DIR__ . "/../utils/basic-skipif.inc"; CLEANUP(STANDALONE) ?>
      --FILE--
      <?php
      require_once __DIR__ . "/../utils/basic.inc";
      
      $manager = new MongoDB\Driver\Manager(STANDALONE);
      
      $manager->executeInsert(NS, array('_id' => 1, 'x' => 1));
      $manager->executeInsert(NS, array('_id' => 2, 'x' => 1));
      
      $user = array(
          "username" => "bob",
          "address" => array(
              "street" => "Main St.",
              "city" => "New York",
          ),
      );
      
      $bulk = new MongoDB\Driver\BulkWrite();
      $user["_id"] = $bulk->insert($user);
      $result = $manager->executeBulkWrite(NS, $bulk);
      
      echo "Dumping inserted user document with injected _id:\n";
      var_dump($user);
      
      $cursor = $manager->executeQuery(NS, new MongoDB\Driver\Query(array("_id" => $user["_id"])));
      
      echo "\nDumping fetched user document:\n";
      $array = $cursor->toArray();
      var_dump($array[0]);
      
      ?>
      ===DONE===
      <?php exit(0); ?>
      --EXPECTF--
      Dumping inserted user document with injected _id:
      array(3) {
        ["username"]=>
        string(3) "bob"
        ["address"]=>
        array(2) {
          ["street"]=>
          string(8) "Main St."
          ["city"]=>
          string(8) "New York"
        }
        ["_id"]=>
        object(BSON\ObjectID)#%d (%d) {
          ["oid"]=>
          string(24) "%s"
        }
      }
      
      Dumping fetched user document:
      array(3) {
        ["_id"]=>
        object(BSON\ObjectID)#%d (%d) {
          ["oid"]=>
          string(24) "%s"
        }
        ["username"]=>
        string(3) "bob"
        ["address"]=>
        object(stdClass)#%d (%d) {
          ["street"]=>
          string(8) "Main St."
          ["city"]=>
          string(8) "New York"
        }
      }
      ===DONE===
      

      Currently fails, where _id is added to the "address" stdclass

            Assignee:
            bjori Hannes Magnusson
            Reporter:
            jmikola@mongodb.com Jeremy Mikola
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: