MongoCollection::remove

(PECL mongo >=0.9.0)

MongoCollection::removeУдаление записей из коллекции

Описание

public MongoCollection::remove ([ array $criteria = array() [, array $options = array() ]] ) : bool|array

Список параметров

criteria

Критерии запроса для удаления из документа

options

Массив опций для операции удаления. В данный момент доступны следующие опции:

  • "w"

    Смотрите Контроль записи. Значение по умолчанию для MongoClient является 1.

  • "justOne"

    Задайте как TRUE для удаления тьолько одного элемента. Если задать как FALSE, либо пропустить, то будут удалены все документы, удовлетворяющие критерию.

  • "fsync"

    Булево, по умолчанию FALSE. Если включено журналирование, то работает также как и "j". Если журналирование не включено, то операции записи блокируются пока не будут синхронизированы с файлами на жестком диске. Если TRUE, то применяется подтвержденная вставка и эта опция переопределяет опцию "w" в значение 0.

    Замечание: Если журналирование включено, то пользователю настоятельно рекомендуется использовать опцию "j" вместо "fsync". Не используйте "fsync" и "j" одновременно,так как это может привести к ошибке.

  • "j"

    Булево, по умолчанию FALSE. Блокирует операции записи пока они не будут синхронизированы с журналом на диске. Если TRUE, то применяется подтвержденная вставка и эта опция переопределяет опцию "w" в значение 0.

    Замечание: Если применяется эта опция и журналирование отключено, то MongoDB 2.6+ выбросит ошибку и прервет запись; старые версии сервера просто игнорируют эту опцию.

  • "socketTimeoutMS"

    Эта опция определяет время в миллисекундах для общения в socket. Если сервер не ответил за отведенное время, то будет брошено исключение MongoCursorTimeoutException, и не будет никакой возможности определить произвел ли сервер запись или нет. Значение -1 используется для постоянно отключения этой функции. Значением по умолчанию для MongoClient является 30000 (30 секунд).

  • "w"

    Смотрите Контроль записи. Значение по умолчанию для MongoClient является 1.

  • "wTimeoutMS"

    Эта опция определяет лимит времени в миллисекундах для подтверждения контроля записи. Она применима только, если "w" больше 1, так как ограничение времени относится к репликации. Если контроль записи не подтвержден за отведенное время, то будет выброшено исключение MongoCursorException. Значение 0 для постоянного отключения. Значением по умолчанию для MongoClient является 10000 (десять секунд).

Следующие опции считаются устаревшими и не рекомендованы к использованию:

  • "safe"

    Устаревшая опция. Используйте опцию "w" контроля записи.

  • "timeout"

    Устаревший псевдоним для "socketTimeoutMS".

  • "wtimeout"

    Устаревший псевдоним для "wTimeoutMS".

Возвращаемые значения

Возвращает массив, содержащий статус удаления, если установлена опция "w". Иначе возвращает TRUE

Поля этого массива описаны в документации для функции MongoCollection::insert().

Ошибки

Исключение MongoCursorException бросается, если установлена опция "w" и не прошла запись.

Исключение MongoCursorTimeoutException бросается, если опция "w" установлена в значение больше одного и операция заняла больше, чем MongoCursor::$timeout миллисекунд. При этом операция на сервере не прерывается, так как это ограничение времени работает на клиентской стороне. Операция в миллисекундах в MongoCollection::$wtimeout.

Список изменений

Версия Описание
1.5.0

Добавлена опция "wTimeoutMS" в замен устаревшей "wtimeout". Ошибка уровня E_DEPRECATED будет вызвана в случае использования "wtimeout".

Добавлена опция "socketTimeoutMS" в замен устаревшей "timeout". Ошибка уровня E_DEPRECATED будет вызвана в случае использования "timeout".

Ошибка уровня E_DEPRECATED будет вызвана в случае использования "safe".

1.3.4 Добавлена опция "wtimeout".
1.3.0

Добавлена опция "w".

Параметр options больше не принимает логические значения для определения поведения как "justOne". Вместо этого необходимо использовать array('justOne' => true).

1.2.11 Ошибка уровня E_DEPRECATED если options скалярного типа.
1.2.0 Добавлена опция "timeout".
1.0.11 Ошибки сброса соединения на "не мастере" если установлена "safe".
1.0.9

Добавлена возможность передавать целые числа в опцию "safe", которая ранее принимала только логические значения.

Добавлена опция "fsync".

Тип возвращаемого значения изменен на массив, содержащий информацию об ошибке если установлена опция "safe". В протовном случае, как и раньше, возвращается логическое значения.

1.0.5 Второй парамент теперь принимает массив опция. До версии 1.0.5 второй параметр принимал логическое значение, устанавливавшее опцию "safe".

Примеры

Пример #1 Пример использования MongoCollection::remove() с опцией justOne

<?php

$radioactive 
$db->radioactive;

// Посчитаем, сколько у нас еще плутония
$remaining $radioactive->count(array('type' => 94));

$halflife $remaining/2;

// удалим половину
while ($halflife 0) {
    
$radioactive->remove(array('type' => 94), array("justOne" => true));
    
$halflife--;
}

?>

Смотрите также

add a note add a note

User Contributed Notes 2 notes

up
15
David Winter
10 years ago
To remove a document based on its ID, you need to ensure that you pass the ID as a MongoID object rather than just a string:

<?php
$id
= '4b3f272c8ead0eb19d000000';

// will not work:
$collection->remove(array('_id' => $id), true);

// will work:
$collection->remove(array('_id' => new MongoId($id)), true);
?>
up
8
konstantin718 at gmail dot com
7 years ago
If you try to remove a document that doesn't exist, remove() won't throw an exception.

Even if 'w' is set to 1, remove() will return an array similar to this:

Array ( [n] => 0 [connectionId] => 10726 [err] => [ok] => 1 )

So, in order to see if a remove() was really successful, you need to look at [n] key.  If it's 0, that means the remove() did not remove any documents.

If remove() is successful, [n] will be > 0.
To Top