mongoDB не позволит мне обновить

Хорошо, эта проблема сводит меня с ума, я думал, что _id должен был быть ObjectID, в то время как первый раз, когда он вставляет, он делает это правильно, когда я пытаюсь обновить его, используя _id, он не работает.

вот мой код

//Save Data
    function savedata($data){
        $collection = $this->db->retail_logs;
        $this->data = $data;

        if($this->data['_id'] == NULL || $this->data['_id'] == "")
        {
            $this->data['_id'] = new MongoId();
        }
        else
        {
         $this->data['_id'] = ObjectID($this->data['_id']);
        }   
        try {
        $collection->update(
            array("_id"=>$this->data['_id']),
            $this->data, // new lead document to insert
            array("upsert" => true, "safe" => true)
            );

            print $this->data['_id'];
        } catch (Exception $e) {
            print "we are not able to update";
        }
    }

я пытался сделать следующее

if($this->data['_id'] == NULL || $this->data['_id'] == "")
            {
                $this->data['_id'] = new MongoId();
            }
            else
            {
             $this->data['_id'] = ObjectID($this->data['_id']);
            }   

но это, похоже, не поможет.

Происходит следующее: он правильно вставляет первый раз с ObjectID(idnumber), а затем, когда идет обновление, удаляет ObjectID() и вставляет новый отряд с тем же idnumber, что и раньше.

так выглядит как "IDNUMBER"

2 ответа

Решение

Ваш оригинальный код близок, но если вы хотите сделать строку _id правильный тип ObjectID, используйте:

$this->data['_id'] = new MongoId($this->data['_id']);

Проверка результата запроса на обновление

Обновление без поддержки может изменить или не изменить существующий объект. Upsert либо изменит существующий объект, либо вставит новый. Клиент может определить, обновило ли его последнее сообщение о соединении существующий объект, впоследствии выполнив команду getlasterror ( db.runCommand( "getlasterror")). Если результат команды getlasterror содержит поле updatedExisting, последним сообщением о соединении был запрос на обновление. Если значение поля updatedExisting равно true, этот запрос на обновление вызвал обновление существующего объекта; если updatedExisting имеет значение false, существующий объект не был обновлен. Поле "upserted" будет содержать новое значение _id, если выполняется вставка (новая на 1.5.4)

Можете ли вы запустить команду в соответствии с рекомендациями Mongo Docs и сообщить нам результат команды

Ссылка: Монго Обновление

Другие вопросы по тегам