2016-01-04 7 views
0

Простое обновление монго переопределяет весь мой документ.Обновление клиента php 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

Вы уверены, что $ где ['id'] установлен? Если это не так, это означает, что вы запрашиваете все документы, применяя при этом все модификации на всех документах –

+0

@LouisF. если он найдет _id, он будет невосприимчив к этой проблеме, и поскольку он использует $ set, это не должно происходить – Sammaye

+0

@LouisF. плюс его код обновляется только один, он не использует multi flag – Sammaye

ответ

1

У вас есть опечатка в коде:

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

должно быть:

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

Причина вы видите это, потому что, по умолчанию, MongoDB перепишет документ, если нет операторов. Это стандартное и документированное поведение.

+0

:/Я один из самых глупых, кого я знаю .... спасибо! –

Смежные вопросы