一个简单的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
}
任何想法?
答案 0 :(得分:1)
您的代码中有拼写错误:
$collection = $this->db->$collection->update($where, $data);
应该是:
$collection = $this->db->$collection->update($where, $newdata);
您看到这个的原因是,默认情况下,如果没有传递运算符,MongoDB 将覆盖文档。这是标准和记录在案的行为。