2012-05-23 3 views
1

У меня возникли проблемы с присвоением моего собственного значения _id при вставке нового документа в мою коллекцию Mongo. Вот мой PHP:mongo php insert with _id

$user = array(
'_id'=> new MongoId("4f626fdf1771a8e71a000000"), 
'name'=> 'John Smith' 
) 
try { 
    if($col->insert($user)){ 
     echo 'INSERTED'; 
    } 
} catch(MongoCursorException $e) { 
    echo "ERROR: ".$e; 
} 

Это сообщение не содержит ошибок, но оно также не вставляет элемент в коллекцию. Однако я могу назначить строковую переменную вместо типа MongoId в поле _id, и она вставляет.

ответ

3

По умолчанию драйвер MongoDB запускает команды в так называемом «небезопасном режиме», когда он запускает «огонь» и «забыл» для запросов и не проверяет наличие ошибок. Итак, если есть повторяющаяся ключевая ошибка, вы не будете знать.

Попробуйте запустить вставку в безопасном режиме, как это:

$col->insert($user, array("safe" => true)); 

О, и вы, безусловно, может сделать свой собственный ObjectIds (вопреки тому, что другие ответы здесь говорят).

+0

Спасибо! Я действительно получил двойную ключевую ошибку! Удалось удалить дубликат ключа из моей коллекции, а затем вставить мой '_id' в качестве объекта типа MongoID. – ndmweb

-3

Вы не можете create MongoDB object ID самостоятельно. Итак, есть два способа вставки документа в коллекцию:

  • Пусть MongoDB создать идентификатор (! Сейф)
  • Выберите идентификатор самостоятельно, это может быть что угодно, кроме массива, и он должен быть уникальный.

Ссылка: Object IDs

Я никогда не использовал сочетание PHP и MongoDB, но попробуйте простой правопреемника строку в _id поле.

+0

Почему именно мы не можем генерировать ObjectIds от себя? –

+0

вы можете генерировать что-либо как ID, но ObjectID генерируются с помощью определенной схемы (содержащей время, идентификатор процесса базы данных, имя хоста ..) в базе данных MongoDB, поэтому вы не могли бы сгенерировать их. Чтобы быть более понятным для людей, которые не читают предоставленные ссылки: ObjectID могут быть созданы MongoDB, НО вы можете установить что угодно, как идентификатор. – TheHippo

+0

От MongoDB Вы имеете в виду сервер? –

0

Safe был устарел от будущего использования. Чтобы убедиться, что вы используете правильную команду, используйте функцию «w» для записи.

$ коллектив-> вставка ($ пользователя, массив ('ш' => верно))

Смотрите здесь: http://php.net/manual/en/mongocollection.insert.php