Удаление документов

Удаление документов поддерживается только в режиме реального времени (RT) для следующих типов таблиц:

Вы можете удалять существующие документы из таблицы либо по их ID, либо по определенным условиям.

Также доступно массовое удаление для удаления нескольких документов.

Удаление документов может быть выполнено как через SQL, так и через JSON интерфейсы.

Для SQL успешная операция вернет количество удаленных строк.

Для JSON используется конечная точка json/delete. Сервер ответит JSON-объектом, указывающим, была ли операция успешной, и количество удаленных строк.

Рекомендуется использовать очистку таблицы (truncation) вместо удаления для удаления всех документов из таблицы, так как это гораздо более быстрая операция.

В этом примере мы удаляем все документы, соответствующие полнотекстовому запросу test document, из таблицы с именем test:

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
mysql> SELECT * FROM TEST;
+------+------+-------------+------+
| id   | gid  | mva1        | mva2 |
+------+------+-------------+------+
|  100 | 1000 | 100,201     | 100  |
|  101 | 1001 | 101,202     | 101  |
|  102 | 1002 | 102,203     | 102  |
|  103 | 1003 | 103,204     | 103  |
|  104 | 1004 | 104,204,205 | 104  |
|  105 | 1005 | 105,206     | 105  |
|  106 | 1006 | 106,207     | 106  |
|  107 | 1007 | 107,208     | 107  |
+------+------+-------------+------+
8 rows in set (0.00 sec)
mysql> DELETE FROM TEST WHERE MATCH ('test document');
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT * FROM TEST;
+------+------+-------------+------+
| id   | gid  | mva1        | mva2 |
+------+------+-------------+------+
|  100 | 1000 | 100,201     | 100  |
|  101 | 1001 | 101,202     | 101  |
|  102 | 1002 | 102,203     | 102  |
|  103 | 1003 | 103,204     | 103  |
|  104 | 1004 | 104,204,205 | 104  |
|  105 | 1005 | 105,206     | 105  |
+------+------+-------------+------+
6 rows in set (0.00 sec)
‹›
Response
{
    "table":"test",
    "deleted":2,
}

Здесь - удаление документа с id, равным 1, из таблицы с именем test:

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
mysql> DELETE FROM TEST WHERE id=1;
Query OK, 1 rows affected (0.00 sec)
‹›
Response
{
    "table": "test",
    "_id": 1,
    "found": true,
    "result": "deleted"
}

Здесь удаляются документы с id, соответствующими значениям из таблицы с именем test:

Обратите внимание, что формы удаления с id=N или id IN (X,Y) являются самыми быстрыми, так как они удаляют документы без выполнения поиска. Также обратите внимание, что ответ содержит только id первого удаленного документа в соответствующем поле _id.

‹›
  • SQL
  • JSON
  • PHP
📋
DELETE FROM TEST WHERE id IN (1,2);
‹›
Response
Query OK, 2 rows affected (0.00 sec)

Manticore SQL позволяет использовать сложные условия для оператора DELETE.

Например, здесь мы удаляем документы, которые соответствуют полнотекстовому запросу test document и имеют атрибут mva1 со значением больше 206 или значения mva1 100 или 103 из таблицы с именем test:

‹›
  • SQL
SQL
📋
DELETE FROM TEST WHERE MATCH ('test document') AND ( mva1>206 or mva1 in (100, 103) );
SELECT * FROM TEST;
‹›
Response
Query OK, 4 rows affected (0.00 sec)
+------+------+-------------+------+
| id   | gid  | mva1        | mva2 |
+------+------+-------------+------+
|  101 | 1001 | 101,202     | 101  |
|  102 | 1002 | 102,203     | 102  |
|  104 | 1004 | 104,204,205 | 104  |
|  105 | 1005 | 105,206     | 105  |
+------+------+-------------+------+
6 rows in set (0.00 sec)

Вот пример удаления документов в таблице test кластера cluster. Обратите внимание, что мы должны указать свойство имени кластера вместе со свойством таблицы, чтобы удалить строку из таблицы внутри репликационного кластера:

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
delete from cluster:test where id=100;
‹›
Response
Array(
    [_index] => test
    [_id] => 100
    [found] => true
    [result] => deleted
)

Массовое удаление

Вы также можете выполнить несколько операций удаления за один вызов, используя конечную точку /bulk. Эта конечная точка работает только с данными, у которых установлен Content-Type в значение application/x-ndjson. Данные должны быть отформатированы как JSON, разделенный символами новой строки (NDJSON). По сути, это означает, что каждая строка должна содержать ровно одно JSON-выражение и заканчиваться символом новой строки \n и, возможно, \r.

‹›
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
POST /bulk
{ "delete" : { "table" : "test", "id" : 1 } }
{ "delete" : { "table" : "test", "query": { "equals": { "int_data" : 20 } } } }
‹›
Response
{
   "items":
   [
      {
         "bulk":
         {
            "table":"test",
            "_id":0,
            "created":0,
            "deleted":2,
            "updated":0,
            "result":"created",
            "status":201
         }
      }
   ],
   "errors":false
}
Last modified: August 28, 2025