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
}