php mongo客户端更新,覆盖所有文档

时间:2016-01-04 19:57:39

标签: php mongodb

一个简单的mongo更新覆盖了我的整个文档。

我的代码:

function update($where, $data, $collection)
     $newdata = array('$set' => $data);

    if (isset($where['id'])) {
        $mongoID = new MongoID($where['id']);
        unset($where['id']);
        $where['_id'] = $mongoID;
    }

    $collection = $this->db->$collection->update($where, $data);

    // $this->db is --> new \MongoClient()->selectDB($db)
}

我的数据是这样的:

  {
      "_id": "asdasd34234414141",
      "username": "whatever",
      "age": 55,
  }

上面的$ newData是:

 ['age'=>20]

但执行代码后会发生什么:

  {
      "_id": "asdasd34234414141",
      "age": 20
  }

任何想法?

1 个答案:

答案 0 :(得分:1)

您的代码中有拼写错误:

$collection = $this->db->$collection->update($where, $data);

应该是:

$collection = $this->db->$collection->update($where, $newdata);

您看到这个的原因是,默认情况下,如果没有传递运算符,MongoDB 将覆盖文档。这是标准和记录在案的行为。