Delete by Query Operation
-
Use
DeleteByQueryOperation
to delete a large number of documents that match the provided query in a single server call. -
Dynamic behavior:
The deletion of documents matching the specified query is performed in batches of size 1024.
During the deletion process, documents that are added/modified after the delete operation has started
may also be deleted if they match the query criteria. -
Background operation:
This operation is performed in the background on the server.
If needed, you can wait for the operation to complete. See: Wait for completion. -
In this page:
Delete by dynamic query
Delete all documents in collection:
// Define the delete by query operation, pass an RQL querying a collection
const deleteByQueryOp = new DeleteByQueryOperation("from 'Orders'");
// Execute the operation by passing it to operations.send
const operation = await store.operations.send(deleteByQueryOp);
// All documents in collection 'Orders' will be deleted from the server.
from "Orders"
Delete with filtering:
// Define the delete by query operation, pass an RQL querying a collection
const deleteByQueryOp = new DeleteByQueryOperation("from 'Orders' where Freight > 30");
// Execute the operation by passing it to operations.send
const operation = await store.operations.send(deleteByQueryOp);
// * All documents matching the specified RQL will be deleted from the server.
// * Since the dynamic query was made with a filtering condition,
// an auto-index is generated (if no other matching auto-index already exists).
from "Orders" where Freight > 30
Delete by index query
-
DeleteByQueryOperation
can only be performed on a Map-index.
An exception is thrown when executing the operation on a Map-Reduce index. -
A few overloads are available, see the following examples:
A sample Map-index:
// The index definition:
// =====================
class Products_ByPrice extends AbstractJavaScriptIndexCreationTask {
constructor () {
super();
this.map("products", product => {
return {
Price: product.PricePerUnit
};
});
}
}
Delete documents via an index query:
// Define the delete by query operation, pass an RQL querying the index
const deleteByQueryOp =
new DeleteByQueryOperation("from index 'Products/ByPrice' where Price > 10");
// Execute the operation by passing it to operations.send
const operation = await store.operations.send(deleteByQueryOp);
// All documents with document-field PricePerUnit > 10 will be deleted from the server.
// Define the index query, provide an RQL querying the index
const indexQuery = new IndexQuery();
indexQuery.query = "from index 'Products/ByPrice' where Price > 10";
// Define the delete by query operation
const deleteByQueryOp = new DeleteByQueryOperation(indexQuery);
// Execute the operation by passing it to operations.send
const operation = await store.operations.send(deleteByQueryOp);
// All documents with document-field PricePerUnit > 10 will be deleted from the server.
from index "Products/ByPrice" where Price > 10
Delete with options:
// QUERY: Define the index query, provide an RQL querying the index
const indexQuery = new IndexQuery();
indexQuery.query = "from index 'Products/ByPrice' where Price > 10";
// OPTIONS: Define the operations options
// (See all available options in the Syntax section below)
const options = {
// Allow the operation to operate even if index is stale
allowStale: true,
// Limit the number of base operations per second allowed.
maxOpsPerSecond: 500
}
// Define the delete by query operation
const deleteByQueryOp = new DeleteByQueryOperation(indexQuery, options);
// Execute the operation by passing it to operations.send
const operation = await store.operations.send(deleteByQueryOp);
// All documents with document-field PricePerUnit > 10 will be deleted from the server.
from index "Products/ByPrice" where Price > 10
- Specifying
options
is also supported by the other overload methods, see the Syntax section below.
Syntax
// Available overload:
// ===================
const deleteByQueryOp = new DeleteByQueryOperation(indexQuery);
const deleteByQueryOp = new DeleteByQueryOperation(indexQuery, options);
Parameter | Type | Description |
---|---|---|
queryToDelete | string |
The RQL query to perform |
queryToDelete | IndexQuery |
Holds all the information required to query an index |
options | object |
Object holding different setting options for the operation |
// options object
{
// Indicates whether operations are allowed on stale indexes.
// DEFAULT: false
allowStale, // boolean
// If AllowStale is set to false and index is stale,
// then this is the maximum timeout to wait for index to become non-stale.
// If timeout is exceeded then exception is thrown.
// DEFAULT: null (if index is stale then exception is thrown immediately)
staleTimeout, // number
// Limits the number of base operations per second allowed.
// DEFAULT: null (no limit)
maxOpsPerSecond, // number
}