/// /** * ```ts * import type { * DocumentCollection, * EdgeCollection, * } from "arangojs/collection.js"; * ``` * * The "collection" module provides collection related types and interfaces * for TypeScript. * * @packageDocumentation */ import { AqlLiteral, AqlQuery } from "./aql.js"; import { ArangoApiResponse } from "./connection.js"; import { Database } from "./database.js"; import { Document, DocumentData, DocumentMetadata, DocumentSelector, Edge, EdgeData, ObjectWithKey, Patch } from "./documents.js"; import { EnsureGeoIndexOptions, EnsureInvertedIndexOptions, EnsurePersistentIndexOptions, EnsureTtlIndexOptions, EnsureMdiIndexOptions, GeoIndex, Index, IndexSelector, InvertedIndex, PersistentIndex, TtlIndex, MdiIndex, EnsureIndexOptions } from "./indexes.js"; /** * Indicates whether the given value represents an {@link ArangoCollection}. * * @param collection - A value that might be a collection. */ export declare function isArangoCollection(collection: any): collection is ArangoCollection; /** * Coerces the given collection name or {@link ArangoCollection} object to * a string representing the collection name. * * @param collection - Collection name or {@link ArangoCollection} object. */ export declare function collectionToString(collection: string | ArangoCollection): string; /** * A marker interface identifying objects that can be used in AQL template * strings to create references to ArangoDB collections. * * See {@link aql!aql}. */ export interface ArangoCollection { /** * @internal * * Indicates that this object represents an ArangoDB collection. */ readonly isArangoCollection: true; /** * Name of the collection. */ readonly name: string; } /** * Integer values indicating the collection type. */ export declare enum CollectionType { DOCUMENT_COLLECTION = 2, EDGE_COLLECTION = 3 } /** * Integer values indicating the collection loading status. */ export declare enum CollectionStatus { NEWBORN = 1, UNLOADED = 2, LOADED = 3, UNLOADING = 4, DELETED = 5, LOADING = 6 } /** * Type of key generator. */ export type KeyGenerator = "traditional" | "autoincrement" | "uuid" | "padded"; /** * Strategy for sharding a collection. */ export type ShardingStrategy = "hash" | "enterprise-hash-smart-edge" | "enterprise-hash-smart-vertex" | "community-compat" | "enterprise-compat" | "enterprise-smart-edge-compat"; /** * When a validation should be applied. * * * `"none"`: No validation. * * `"new"`: Newly inserted documents are validated. * * `"moderate"`: New and modified documents are validated unless the modified * document was already invalid. * * `"strict"`: New and modified documents are always validated. */ export type ValidationLevel = "none" | "new" | "moderate" | "strict"; /** * Write operation that can result in a computed value being computed. */ export type WriteOperation = "insert" | "update" | "replace"; /** * Represents a bulk operation failure for an individual document. */ export type DocumentOperationFailure = { /** * Indicates that the operation failed. */ error: true; /** * Human-readable description of the failure. */ errorMessage: string; /** * Numeric representation of the failure. */ errorNum: number; }; /** * Metadata returned by a document operation. */ export type DocumentOperationMetadata = DocumentMetadata & { /** * Revision of the document that was updated or replaced by this operation. */ _oldRev?: string; }; /** * Properties defining a computed value. */ export type ComputedValueProperties = { /** * Name of the target attribute of the computed value. */ name: string; /** * AQL `RETURN` expression that computes the value. */ expression: string; /** * If set to `false`, the computed value will not be applied if the * expression evaluates to `null`. */ overwrite: boolean; /** * Which operations should result in the value being computed. */ computeOn: WriteOperation[]; /** * If set to `false`, the field will be unset if the expression evaluates to * `null`. Otherwise the field will be set to the value `null`. Has no effect * if `overwrite` is set to `false`. */ keepNull: boolean; /** * Whether the write operation should fail if the expression produces a * warning. */ failOnWarning: boolean; }; /** * General information about a collection. */ export type CollectionMetadata = { /** * Collection name. */ name: string; /** * A globally unique identifier for this collection. */ globallyUniqueId: string; /** * An integer indicating the collection loading status. */ status: CollectionStatus; /** * An integer indicating the collection type. */ type: CollectionType; /** * @internal * * Whether the collection is a system collection. */ isSystem: boolean; }; /** * An object defining the collection's key generation. */ export type CollectionKeyProperties = { /** * Type of key generator to use. */ type: KeyGenerator; /** * Whether documents can be created with a user-specified `_key` attribute. */ allowUserKeys: boolean; /** * (Autoincrement only.) How many steps to increment the key each time. */ increment?: number; /** * (Autoincrement only.) Initial offset for the key. */ offset?: number; /** * Most recent key that has been generated. */ lastValue: number; }; /** * Properties for validating documents in a collection. */ export type SchemaProperties = { /** * Type of document validation. */ type: "json"; /** * JSON Schema description of the validation schema for documents. */ rule: any; /** * When validation should be applied. */ level: ValidationLevel; /** * Message to be used if validation fails. */ message: string; }; /** * An object defining the properties of a collection. */ export type CollectionProperties = { /** * A human-readable representation of the collection loading status. */ statusString: string; /** * Whether data should be synchronized to disk before returning from * a document create, update, replace or removal operation. */ waitForSync: boolean; /** * An object defining the collection's key generation. */ keyOptions: CollectionKeyProperties; /** * Properties for validating documents in the collection. */ schema: SchemaProperties | null; /** * (Cluster only.) Write concern for this collection. */ writeConcern: number; /** * (Cluster only.) Number of shards of this collection. */ numberOfShards?: number; /** * (Cluster only.) Keys of this collection that will be used for * sharding. */ shardKeys?: string[]; /** * (Cluster only.) Replication factor of the collection. */ replicationFactor?: number | "satellite"; /** * (Cluster only.) Sharding strategy of the collection. */ shardingStrategy?: ShardingStrategy; /** * (Enterprise Edition cluster only.) If set to a collection name, sharding * of the new collection will follow the rules for that collection. As long * as the new collection exists, the indicated collection can not be dropped. */ distributeShardsLike?: string; /** * (Enterprise Edition cluster only.) Attribute containing the shard key * value of the referred-to smart join collection. */ smartJoinAttribute?: string; /** * (Enterprise Edition cluster only.) Attribute used for sharding. */ smartGraphAttribute?: string; /** * Computed values applied to documents in this collection. */ computedValues: ComputedValueProperties[]; /** * Whether the in-memory hash cache is enabled for this collection. */ cacheEnabled: boolean; /** * Whether the newer revision-based replication protocol is enabled for * this collection. */ syncByRevision: boolean; /** * (Enterprise Edition only.) Whether the collection is used in a SmartGraph or EnterpriseGraph. */ isSmart?: boolean; /** * (Enterprise Edition only.) Whether the SmartGraph this collection belongs to is disjoint. */ isDisjoint?: string; }; /** * Options for creating a computed value. */ export type ComputedValueOptions = { /** * Name of the target attribute of the computed value. */ name: string; /** * AQL `RETURN` expression that computes the value. * * Note that when passing an AQL query object, the `bindVars` will be ignored. */ expression: string | AqlLiteral | AqlQuery; /** * If set to `false`, the computed value will not be applied if the * expression evaluates to `null`. * * Default: `true` */ overwrite?: boolean; /** * Which operations should result in the value being computed. * * Default: `["insert", "update", "replace"]` */ computeOn?: WriteOperation[]; /** * If set to `false`, the field will be unset if the expression evaluates to * `null`. Otherwise the field will be set to the value `null`. Has no effect * if `overwrite` is set to `false`. * * Default: `true` */ keepNull?: boolean; /** * Whether the write operation should fail if the expression produces a * warning. * * Default: `false` */ failOnWarning?: boolean; }; /** * Options for validating collection documents. */ export type SchemaOptions = { /** * JSON Schema description of the validation schema for documents. */ rule: any; /** * When validation should be applied. * * Default: `"strict"` */ level?: ValidationLevel; /** * Message to be used if validation fails. */ message?: string; }; /** * Options for setting a collection's properties. * * See {@link DocumentCollection#properties} and {@link EdgeCollection#properties}. */ export type CollectionPropertiesOptions = { /** * Whether data should be synchronized to disk before returning from * a document create, update, replace or removal operation. */ waitForSync?: boolean; /** * (Cluster only.) How many copies of each document should be kept in the * cluster. * * Default: `1` */ replicationFactor?: number | "satellite"; /** * (Cluster only.) Write concern for this collection. */ writeConcern?: number; /** * Options for validating documents in this collection. */ schema?: SchemaOptions; /** * Computed values to apply to documents in this collection. */ computedValues?: ComputedValueOptions[]; /** * Whether the in-memory hash cache is enabled for this collection. * * Default: `false` */ cacheEnabled?: boolean; }; /** * Options for retrieving a collection checksum. */ export type CollectionChecksumOptions = { /** * If set to `true`, revision IDs will be included in the calculation * of the checksum. * * Default: `false` */ withRevisions?: boolean; /** * If set to `true`, document data will be included in the calculation * of the checksum. * * Default: `false` */ withData?: boolean; }; /** * Options for dropping collections. */ export type CollectionDropOptions = { /** * Whether the collection is a system collection. If the collection is a * system collection, this option must be set to `true` or ArangoDB will * refuse to drop the collection. * * Default: `false` */ isSystem?: boolean; }; /** * An object defining the collection's key generation. */ export type CollectionKeyOptions = { /** * Type of key generator to use. */ type?: KeyGenerator; /** * Unless set to `false`, documents can be created with a user-specified * `_key` attribute. * * Default: `true` */ allowUserKeys?: boolean; /** * (Autoincrement only.) How many steps to increment the key each time. */ increment?: number; /** * (Autoincrement only.) Initial offset for the key. */ offset?: number; }; /** * Options for creating a collection. * * See {@link database.Database#createCollection}, {@link database.Database#createEdgeCollection} * and {@link DocumentCollection#create} or {@link EdgeCollection#create}. */ export type CreateCollectionOptions = { /** * If set to `true`, data will be synchronized to disk before returning from * a document create, update, replace or removal operation. * * Default: `false` */ waitForSync?: boolean; /** * @internal * * Whether the collection should be created as a system collection. * * Default: `false` */ isSystem?: boolean; /** * An object defining the collection's key generation. */ keyOptions?: CollectionKeyOptions; /** * Options for validating documents in the collection. */ schema?: SchemaOptions; /** * (Cluster only.) Unless set to `false`, the server will wait for all * replicas to create the collection before returning. * * Default: `true` */ waitForSyncReplication?: boolean; /** * (Cluster only.) Unless set to `false`, the server will check whether * enough replicas are available at creation time and bail out otherwise. * * Default: `true` */ enforceReplicationFactor?: boolean; /** * (Cluster only.) Number of shards to distribute the collection across. * * Default: `1` */ numberOfShards?: number; /** * (Cluster only.) Document attributes to use to determine the target shard * for each document. * * Default: `["_key"]` */ shardKeys?: string[]; /** * (Cluster only.) How many copies of each document should be kept in the * cluster. * * Default: `1` */ replicationFactor?: number; /** * (Cluster only.) Write concern for this collection. */ writeConcern?: number; /** * (Cluster only.) Sharding strategy to use. */ shardingStrategy?: ShardingStrategy; /** * (Enterprise Edition cluster only.) If set to a collection name, sharding * of the new collection will follow the rules for that collection. As long * as the new collection exists, the indicated collection can not be dropped. */ distributeShardsLike?: string; /** * (Enterprise Edition cluster only.) Attribute containing the shard key * value of the referred-to smart join collection. */ smartJoinAttribute?: string; /** * (Enterprise Edition cluster only.) Attribute used for sharding. */ smartGraphAttribute?: string; /** * Computed values to apply to documents in this collection. */ computedValues?: ComputedValueOptions[]; /** * Whether the in-memory hash cache is enabled for this collection. */ cacheEnabled?: boolean; }; /** * Options for checking whether a document exists in a collection. */ export type DocumentExistsOptions = { /** * If set to a document revision, the document will only match if its `_rev` * matches the given revision. */ ifMatch?: string; /** * If set to a document revision, the document will only match if its `_rev` * does not match the given revision. */ ifNoneMatch?: string; }; /** * Options for retrieving a document from a collection. */ export type CollectionReadOptions = { /** * If set to `true`, `null` is returned instead of an exception being thrown * if the document does not exist. */ graceful?: boolean; /** * If set to `true`, the request will explicitly permit ArangoDB to return a * potentially dirty or stale result and arangojs will load balance the * request without distinguishing between leaders and followers. */ allowDirtyRead?: boolean; /** * If set to a document revision, the request will fail with an error if the * document exists but its `_rev` does not match the given revision. */ ifMatch?: string; /** * If set to a document revision, the request will fail with an error if the * document exists and its `_rev` matches the given revision. Note that an * `HttpError` with code 304 will be thrown instead of an `ArangoError`. */ ifNoneMatch?: string; }; /** * Options for retrieving multiple documents from a collection. */ export type CollectionBatchReadOptions = { /** * If set to `true`, the request will explicitly permit ArangoDB to return a * potentially dirty or stale result and arangojs will load balance the * request without distinguishing between leaders and followers. */ allowDirtyRead?: boolean; }; /** * Options for inserting a new document into a collection. */ export type CollectionInsertOptions = { /** * If set to `true`, data will be synchronized to disk before returning. * * Default: `false` */ waitForSync?: boolean; /** * If set to `true`, no data will be returned by the server. This option can * be used to reduce network traffic. * * Default: `false` */ silent?: boolean; /** * If set to `true`, the complete new document will be returned as the `new` * property on the result object. Has no effect if `silent` is set to `true`. * * Default: `false` */ returnNew?: boolean; /** * If set to `true`, the complete old document will be returned as the `old` * property on the result object. Has no effect if `silent` is set to `true`. * This option is only available when `overwriteMode` is set to `"update"` or * `"replace"`. * * Default: `false` */ returnOld?: boolean; /** * Defines what should happen if a document with the same `_key` or `_id` * already exists, instead of throwing an exception. * * Default: `"conflict" */ overwriteMode?: "ignore" | "update" | "replace" | "conflict"; /** * If set to `false`, object properties that already exist in the old * document will be overwritten rather than merged when an existing document * with the same `_key` or `_id` is updated. This does not affect arrays. * * Default: `true` */ mergeObjects?: boolean; /** * If set to `true`, new entries will be added to in-memory index caches if * document insertions affect the edge index or cache-enabled persistent * indexes. * * Default: `false` */ refillIndexCaches?: boolean; /** * If set, the attribute with the name specified by the option is looked up * in the stored document and the attribute value is compared numerically to * the value of the versioning attribute in the supplied document that is * supposed to update/replace it. */ versionAttribute?: string; }; /** * Options for replacing an existing document in a collection. */ export type CollectionReplaceOptions = { /** * If set to `true`, data will be synchronized to disk before returning. * * Default: `false` */ waitForSync?: boolean; /** * If set to `true`, no data will be returned by the server. This option can * be used to reduce network traffic. * * Default: `false` */ silent?: boolean; /** * If set to `true`, the complete new document will be returned as the `new` * property on the result object. Has no effect if `silent` is set to `true`. * * Default: `false` */ returnNew?: boolean; /** * If set to `false`, the existing document will only be modified if its * `_rev` property matches the same property on the new data. * * Default: `true` */ ignoreRevs?: boolean; /** * If set to `true`, the complete old document will be returned as the `old` * property on the result object. Has no effect if `silent` is set to `true`. * * Default: `false` */ returnOld?: boolean; /** * If set to a document revision, the document will only be replaced if its * `_rev` matches the given revision. */ ifMatch?: string; /** * If set to `true`, existing entries in in-memory index caches will be * updated if document replacements affect the edge index or cache-enabled * persistent indexes. * * Default: `false` */ refillIndexCaches?: boolean; /** * If set, the attribute with the name specified by the option is looked up * in the stored document and the attribute value is compared numerically to * the value of the versioning attribute in the supplied document that is * supposed to update/replace it. */ versionAttribute?: string; }; /** * Options for updating a document in a collection. */ export type CollectionUpdateOptions = { /** * If set to `true`, data will be synchronized to disk before returning. * * Default: `false` */ waitForSync?: boolean; /** * If set to `true`, no data will be returned by the server. This option can * be used to reduce network traffic. * * Default: `false` */ silent?: boolean; /** * If set to `true`, the complete new document will be returned as the `new` * property on the result object. Has no effect if `silent` is set to `true`. * * Default: `false` */ returnNew?: boolean; /** * If set to `false`, the existing document will only be modified if its * `_rev` property matches the same property on the new data. * * Default: `true` */ ignoreRevs?: boolean; /** * If set to `true`, the complete old document will be returned as the `old` * property on the result object. Has no effect if `silent` is set to `true`. * * Default: `false` */ returnOld?: boolean; /** * If set to `false`, properties with a value of `null` will be removed from * the new document. * * Default: `true` */ keepNull?: boolean; /** * If set to `false`, object properties that already exist in the old * document will be overwritten rather than merged. This does not affect * arrays. * * Default: `true` */ mergeObjects?: boolean; /** * If set to a document revision, the document will only be updated if its * `_rev` matches the given revision. */ ifMatch?: string; /** * If set to `true`, existing entries in in-memory index caches will be * updated if document updates affect the edge index or cache-enabled * persistent indexes. * * Default: `false` */ refillIndexCaches?: boolean; /** * If set, the attribute with the name specified by the option is looked up * in the stored document and the attribute value is compared numerically to * the value of the versioning attribute in the supplied document that is * supposed to update/replace it. */ versionAttribute?: string; }; /** * Options for removing a document from a collection. */ export type CollectionRemoveOptions = { /** * If set to `true`, changes will be synchronized to disk before returning. * * Default: `false` */ waitForSync?: boolean; /** * If set to `true`, the complete old document will be returned as the `old` * property on the result object. Has no effect if `silent` is set to `true`. * * Default: `false` */ returnOld?: boolean; /** * If set to `true`, no data will be returned by the server. This option can * be used to reduce network traffic. * * Default: `false` */ silent?: boolean; /** * If set to a document revision, the document will only be removed if its * `_rev` matches the given revision. */ ifMatch?: string; /** * If set to `true`, existing entries in in-memory index caches will be * deleted if document removals affect the edge index or cache-enabled * persistent indexes. * * Default: `false` */ refillIndexCaches?: boolean; }; /** * Options for bulk importing documents into a collection. */ export type CollectionImportOptions = { /** * (Edge collections only.) Prefix to prepend to `_from` attribute values. */ fromPrefix?: string; /** * (Edge collections only.) Prefix to prepend to `_to` attribute values. */ toPrefix?: string; /** * If set to `true`, the collection is truncated before the data is imported. * * Default: `false` */ overwrite?: boolean; /** * Whether to wait for the documents to have been synced to disk. */ waitForSync?: boolean; /** * Controls behavior when a unique constraint is violated on the document key. * * * `"error"`: the document will not be imported. * * `"update`: the document will be merged into the existing document. * * `"replace"`: the document will replace the existing document. * * `"ignore"`: the document will not be imported and the unique constraint * error will be ignored. * * Default: `"error"` */ onDuplicate?: "error" | "update" | "replace" | "ignore"; /** * If set to `true`, the import will abort if any error occurs. */ complete?: boolean; /** * Whether the response should contain additional details about documents * that could not be imported. */ details?: boolean; }; /** * Options for retrieving a document's edges from a collection. */ export type CollectionEdgesOptions = { /** * If set to `true`, the request will explicitly permit ArangoDB to return a * potentially dirty or stale result and arangojs will load balance the * request without distinguishing between leaders and followers. */ allowDirtyRead?: boolean; }; export type IndexListOptions = { /** * If set to `true`, includes additional information about each index. * * Default: `false` */ withStats?: boolean; /** * If set to `true`, includes indexes that are not yet fully built but are * in the building phase. * * Default: `false`. */ withHidden?: boolean; }; /** * Result of a collection bulk import. */ export type CollectionImportResult = { /** * Whether the import failed. */ error: false; /** * Number of new documents imported. */ created: number; /** * Number of documents that failed with an error. */ errors: number; /** * Number of empty documents. */ empty: number; /** * Number of documents updated. */ updated: number; /** * Number of documents that failed with an error that is ignored. */ ignored: number; /** * Additional details about any errors encountered during the import. */ details?: string[]; }; /** * Result of retrieving edges in a collection. */ export type CollectionEdgesResult = any> = { edges: Edge[]; stats: { scannedIndex: number; filtered: number; }; }; /** * Represents an document collection in a {@link database.Database}. * * See {@link EdgeCollection} for a variant of this interface more suited for * edge collections. * * When using TypeScript, collections can be cast to a specific document data * type to increase type safety. * * @param T - Type to use for document data. Defaults to `any`. * * @example * ```ts * interface Person { * name: string; * } * const db = new Database(); * const documents = db.collection("persons") as DocumentCollection; * ``` */ export interface DocumentCollection = any, EntryInputType extends Record = EntryResultType> extends ArangoCollection { /** * Checks whether the collection exists. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const result = await collection.exists(); * // result indicates whether the collection exists * ``` */ exists(): Promise; /** * Retrieves general information about the collection. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const data = await collection.get(); * // data contains general information about the collection * ``` */ get(): Promise>; /** * Creates a collection with the given `options` and the instance's name. * * See also {@link database.Database#createCollection} and * {@link database.Database#createEdgeCollection}. * * **Note**: When called on an {@link EdgeCollection} instance in TypeScript, * the `type` option must still be set to the correct {@link CollectionType}. * Otherwise this will result in the collection being created with the * default type (i.e. as a document collection). * * @param options - Options for creating the collection. * * @example * ```js * const db = new Database(); * const collection = db.collection("potatoes"); * await collection.create(); * // the document collection "potatoes" now exists * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * await collection.create({ type: CollectionType.EDGE_COLLECTION }); * // the edge collection "friends" now exists * ``` * * @example * ```ts * interface Friend { * startDate: number; * endDate?: number; * } * const db = new Database(); * const collection = db.collection("friends") as EdgeCollection; * // even in TypeScript you still need to indicate the collection type * // if you want to create an edge collection * await collection.create({ type: CollectionType.EDGE_COLLECTION }); * // the edge collection "friends" now exists * ``` */ create(options?: CreateCollectionOptions & { type?: CollectionType; }): Promise>; /** * Retrieves the collection's properties. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const data = await collection.properties(); * // data contains the collection's properties * ``` */ properties(): Promise>; /** * Replaces the properties of the collection. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const result = await collection.setProperties({ waitForSync: true }); * // the collection will now wait for data being written to disk * // whenever a document is changed * ``` */ properties(properties: CollectionPropertiesOptions): Promise>; /** * Retrieves information about the number of documents in a collection. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const data = await collection.count(); * // data contains the collection's count * ``` */ count(): Promise>; /** * Instructs ArangoDB to recalculate the collection's document count to fix * any inconsistencies. * * @example * ```js * const db = new Database(); * const collection = db.collection("inconsistent-collection"); * const badData = await collection.count(); * // oh no, the collection count looks wrong -- fix it! * await collection.recalculateCount(); * const goodData = await collection.count(); * // goodData contains the collection's improved count * ``` */ recalculateCount(): Promise; /** * Retrieves statistics for a collection. * * @param details - whether to return extended storage engine-specific details * to the figures, which may cause additional load and impact performance * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const data = await collection.figures(); * // data contains the collection's figures * ``` */ figures(details?: boolean): Promise; }>>; /** * Retrieves the collection revision ID. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const data = await collection.revision(); * // data contains the collection's revision * ``` */ revision(): Promise>; /** * Retrieves the collection checksum. * * @param options - Options for retrieving the checksum. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const data = await collection.checksum(); * // data contains the collection's checksum * ``` */ checksum(options?: CollectionChecksumOptions): Promise>; /** * Instructs ArangoDB to load as many indexes of the collection into memory * as permitted by the memory limit. * * @example * ```js * const db = new Database(); * const collection = db.collection("indexed-collection"); * await collection.loadIndexes(); * // the indexes are now loaded into memory * ``` */ loadIndexes(): Promise; /** * Renames the collection and updates the instance's `name` to `newName`. * * Additionally removes the instance from the {@link database.Database}'s internal * cache. * * **Note**: Renaming collections may not be supported when ArangoDB is * running in a cluster configuration. * * @param newName - The new name of the collection. * * @example * ```js * const db = new Database(); * const collection1 = db.collection("some-collection"); * await collection1.rename("other-collection"); * const collection2 = db.collection("some-collection"); * const collection3 = db.collection("other-collection"); * // Note all three collection instances are different objects but * // collection1 and collection3 represent the same ArangoDB collection! * ``` */ rename(newName: string): Promise>; /** * Deletes all documents in the collection. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.truncate(); * // millions of documents cry out in terror and are suddenly silenced, * // the collection "some-collection" is now empty * ``` */ truncate(): Promise>; /** * Deletes the collection from the database. * * @param options - Options for dropping the collection. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.drop(); * // The collection "some-collection" is now an ex-collection * ``` */ drop(options?: CollectionDropOptions): Promise>>; /** * Retrieves the `shardId` of the shard responsible for the given document. * * @param document - Document in the collection to look up the `shardId` of. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const responsibleShard = await collection.getResponsibleShard(); * ``` */ getResponsibleShard(document: Partial>): Promise; /** * Derives a document `_id` from the given selector for this collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const meta = await collection.save({ foo: "bar" }, { returnNew: true }); * const doc = meta.new; * console.log(collection.documentId(meta)); // via meta._id * console.log(collection.documentId(doc)); // via doc._id * console.log(collection.documentId(meta._key)); // also works * ``` * * @example * ```js * const db = new Database(); * const collection1 = db.collection("some-collection"); * const collection2 = db.collection("other-collection"); * const meta = await collection1.save({ foo: "bar" }); * // Mixing collections is usually a mistake * console.log(collection1.documentId(meta)); // ok: same collection * console.log(collection2.documentId(meta)); // throws: wrong collection * console.log(collection2.documentId(meta._id)); // also throws * console.log(collection2.documentId(meta._key)); // ok but wrong collection * ``` */ documentId(selector: DocumentSelector): string; /** * Checks whether a document matching the given key or id exists in this * collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const exists = await collection.documentExists("abc123"); * if (!exists) { * console.log("Document does not exist"); * } * ``` */ documentExists(selector: DocumentSelector, options?: DocumentExistsOptions): Promise; /** * Retrieves the document matching the given key or id. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param options - Options for retrieving the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * try { * const document = await collection.document("abc123"); * console.log(document); * } catch (e: any) { * console.error("Could not find document"); * } * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const document = await collection.document("abc123", { graceful: true }); * if (document) { * console.log(document); * } else { * console.error("Could not find document"); * } * ``` */ document(selector: DocumentSelector, options?: CollectionReadOptions): Promise>; /** * Retrieves the document matching the given key or id. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param graceful - If set to `true`, `null` is returned instead of an * exception being thrown if the document does not exist. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * try { * const document = await collection.document("abc123", false); * console.log(document); * } catch (e: any) { * console.error("Could not find document"); * } * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const document = await collection.document("abc123", true); * if (document) { * console.log(document); * } else { * console.error("Could not find document"); * } * ``` */ document(selector: DocumentSelector, graceful: boolean): Promise>; /** * Retrieves the documents matching the given key or id values. * * Throws an exception when passed a document or `_id` from a different * collection, or if the document does not exist. * * @param selectors - Array of document `_key`, `_id` or objects with either * of those properties (e.g. a document from this collection). * @param options - Options for retrieving the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * try { * const documents = await collection.documents(["abc123", "xyz456"]); * console.log(documents); * } catch (e: any) { * console.error("Could not find document"); * } * ``` */ documents(selectors: (string | ObjectWithKey)[], options?: CollectionBatchReadOptions): Promise[]>; /** * Inserts a new document with the given `data` into the collection. * * @param data - The contents of the new document. * @param options - Options for inserting the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const result = await collection.save( * { _key: "a", color: "blue", count: 1 }, * { returnNew: true } * ); * console.log(result.new.color, result.new.count); // "blue" 1 * ``` */ save(data: DocumentData, options?: CollectionInsertOptions): Promise; old?: Document; }>; /** * Inserts new documents with the given `data` into the collection. * * @param data - The contents of the new documents. * @param options - Options for inserting the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const result = await collection.saveAll( * [ * { _key: "a", color: "blue", count: 1 }, * { _key: "b", color: "red", count: 2 }, * ], * { returnNew: true } * ); * console.log(result[0].new.color, result[0].new.count); // "blue" 1 * console.log(result[1].new.color, result[1].new.count); // "red" 2 * ``` */ saveAll(data: Array>, options?: CollectionInsertOptions): Promise; old?: Document; }) | DocumentOperationFailure>>; /** * Replaces an existing document in the collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param newData - The contents of the new document. * @param options - Options for replacing the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.save({ _key: "a", color: "blue", count: 1 }); * const result = await collection.replace( * "a", * { color: "red" }, * { returnNew: true } * ); * console.log(result.new.color, result.new.count); // "red" undefined * ``` */ replace(selector: DocumentSelector, newData: DocumentData, options?: CollectionReplaceOptions): Promise; old?: Document; }>; /** * Replaces existing documents in the collection, identified by the `_key` or * `_id` of each document. * * @param newData - The documents to replace. * @param options - Options for replacing the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.save({ _key: "a", color: "blue", count: 1 }); * await collection.save({ _key: "b", color: "green", count: 3 }); * const result = await collection.replaceAll( * [ * { _key: "a", color: "red" }, * { _key: "b", color: "yellow", count: 2 } * ], * { returnNew: true } * ); * console.log(result[0].new.color, result[0].new.count); // "red" undefined * console.log(result[1].new.color, result[1].new.count); // "yellow" 2 * ``` */ replaceAll(newData: Array & ({ _key: string; } | { _id: string; })>, options?: Omit): Promise; old?: Document; }) | DocumentOperationFailure>>; /** * Updates an existing document in the collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param newData - The data for updating the document. * @param options - Options for updating the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.save({ _key: "a", color: "blue", count: 1 }); * const result = await collection.update( * "a", * { count: 2 }, * { returnNew: true } * ); * console.log(result.new.color, result.new.count); // "blue" 2 * ``` */ update(selector: DocumentSelector, newData: Patch>, options?: CollectionUpdateOptions): Promise; old?: Document; }>; /** * Updates existing documents in the collection, identified by the `_key` or * `_id` of each document. * * @param newData - The data for updating the documents. * @param options - Options for updating the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.save({ _key: "a", color: "blue", count: 1 }); * await collection.save({ _key: "b", color: "green", count: 3 }); * const result = await collection.updateAll( * [ * { _key: "a", count: 2 }, * { _key: "b", count: 4 } * ], * { returnNew: true } * ); * console.log(result[0].new.color, result[0].new.count); // "blue" 2 * console.log(result[1].new.color, result[1].new.count); // "green" 4 * ``` */ updateAll(newData: Array> & ({ _key: string; } | { _id: string; })>, options?: Omit): Promise; old?: Document; }) | DocumentOperationFailure>>; /** * Removes an existing document from the collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param options - Options for removing the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.remove("abc123"); * // document with key "abc123" deleted * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const doc = await collection.document("abc123"); * await collection.remove(doc); * // document with key "abc123" deleted * ``` */ remove(selector: DocumentSelector, options?: CollectionRemoveOptions): Promise; }>; /** * Removes existing documents from the collection. * * Throws an exception when passed any document or `_id` from a different * collection. * * @param selectors - Documents `_key`, `_id` or objects with either of those * properties (e.g. documents from this collection). * @param options - Options for removing the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.removeAll(["abc123", "def456"]); * // document with keys "abc123" and "def456" deleted * ``` */ removeAll(selectors: (string | ObjectWithKey)[], options?: Omit): Promise; }) | DocumentOperationFailure>>; /** * Bulk imports the given `data` into the collection. * * @param data - The data to import, as an array of document data. * @param options - Options for importing the data. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * [ * { _key: "jcd", password: "bionicman" }, * { _key: "jreyes", password: "amigo" }, * { _key: "ghermann", password: "zeitgeist" } * ] * ); * ``` */ import(data: DocumentData[], options?: CollectionImportOptions): Promise; /** * Bulk imports the given `data` into the collection. * * @param data - The data to import, as an array containing a single array of * attribute names followed by one or more arrays of attribute values for * each document. * @param options - Options for importing the data. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * [ * [ "_key", "password" ], * [ "jcd", "bionicman" ], * [ "jreyes", "amigo" ], * [ "ghermann", "zeitgeist" ] * ] * ); * ``` */ import(data: any[][], options?: CollectionImportOptions): Promise; /** * Bulk imports the given `data` into the collection. * * If `type` is omitted, `data` must contain one JSON array per line with * the first array providing the attribute names and all other arrays * providing attribute values for each document. * * If `type` is set to `"documents"`, `data` must contain one JSON document * per line. * * If `type` is set to `"list"`, `data` must contain a JSON array of * documents. * * If `type` is set to `"auto"`, `data` can be in either of the formats * supported by `"documents"` or `"list"`. * * @param data - The data to import as a Buffer (Node), Blob (browser) or * string. * @param options - Options for importing the data. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * '{"_key":"jcd","password":"bionicman"}\r\n' + * '{"_key":"jreyes","password":"amigo"}\r\n' + * '{"_key":"ghermann","password":"zeitgeist"}\r\n', * { type: "documents" } // or "auto" * ); * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * '[{"_key":"jcd","password":"bionicman"},' + * '{"_key":"jreyes","password":"amigo"},' + * '{"_key":"ghermann","password":"zeitgeist"}]', * { type: "list" } // or "auto" * ); * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * '["_key","password"]\r\n' + * '["jcd","bionicman"]\r\n' + * '["jreyes","amigo"]\r\n' + * '["ghermann","zeitgeist"]\r\n' * ); * ``` */ import(data: Buffer | Blob | string, options?: CollectionImportOptions & { type?: "documents" | "list" | "auto"; }): Promise; /** * Returns a list of all index descriptions for the collection. * * @param options - Options for fetching the index list. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const indexes = await collection.indexes(); * ``` */ indexes(options?: IndexListOptions): Promise; /** * Returns an index description by name or `id` if it exists. * * @param selector - Index name, id or object with either property. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const index = await collection.index("some-index"); * ``` */ index(selector: IndexSelector): Promise; /** * Creates a persistent index on the collection if it does not already exist. * * @param details - Options for creating the persistent index. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * // Create a unique index for looking up documents by username * await collection.ensureIndex({ * type: "persistent", * fields: ["username"], * name: "unique-usernames", * unique: true * }); * ``` */ ensureIndex(details: EnsurePersistentIndexOptions): Promise>; /** * Creates a TTL index on the collection if it does not already exist. * * @param details - Options for creating the TTL index. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * // Expire documents with "createdAt" timestamp one day after creation * await collection.ensureIndex({ * type: "ttl", * fields: ["createdAt"], * expireAfter: 60 * 60 * 24 // 24 hours * }); * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * // Expire documents with "expiresAt" timestamp according to their value * await collection.ensureIndex({ * type: "ttl", * fields: ["expiresAt"], * expireAfter: 0 // when attribute value is exceeded * }); * ``` */ ensureIndex(details: EnsureTtlIndexOptions): Promise>; /** * Creates a multi-dimensional index on the collection if it does not already exist. * * @param details - Options for creating the multi-dimensional index. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-points"); * // Create a multi-dimensional index for the attributes x, y and z * await collection.ensureIndex({ * type: "mdi", * fields: ["x", "y", "z"], * fieldValueTypes: "double" * }); * ``` * ``` */ ensureIndex(details: EnsureMdiIndexOptions): Promise>; /** * Creates a geo index on the collection if it does not already exist. * * @param details - Options for creating the geo index. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * // Create an index for GeoJSON data * await collection.ensureIndex({ * type: "geo", * fields: ["lngLat"], * geoJson: true * }); * ``` */ ensureIndex(details: EnsureGeoIndexOptions): Promise>; /** * Creates a inverted index on the collection if it does not already exist. * * @param details - Options for creating the inverted index. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * // Create an inverted index * await collection.ensureIndex({ * type: "inverted", * fields: ["a", { name: "b", analyzer: "text_en" }] * }); * ``` */ ensureIndex(details: EnsureInvertedIndexOptions): Promise>; /** * Creates an index on the collection if it does not already exist. * * @param details - Options for creating the index. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * // Create a unique index for looking up documents by username * await collection.ensureIndex({ * type: "persistent", * fields: ["username"], * name: "unique-usernames", * unique: true * }); * ``` */ ensureIndex(details: EnsureIndexOptions): Promise>; /** * Deletes the index with the given name or `id` from the database. * * @param selector - Index name, id or object with either property. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.dropIndex("some-index"); * // The index "some-index" no longer exists * ``` */ dropIndex(selector: IndexSelector): Promise>; /** * Triggers compaction for a collection. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.compact(); * // Background compaction is triggered on the collection * ``` */ compact(): Promise>>; } /** * Represents an edge collection in a {@link database.Database}. * * See {@link DocumentCollection} for a more generic variant of this interface * more suited for regular document collections. * * See also {@link graph.GraphEdgeCollection} for the type representing an edge * collection in a {@link graph.Graph}. * * When using TypeScript, collections can be cast to a specific edge document * data type to increase type safety. * * @param T - Type to use for edge document data. Defaults to `any`. * * @example * ```ts * interface Friend { * startDate: number; * endDate?: number; * } * const db = new Database(); * const edges = db.collection("friends") as EdgeCollection; * ``` */ export interface EdgeCollection = any, EntryInputType extends Record = EntryResultType> extends DocumentCollection { /** * Retrieves the document matching the given key or id. * * Throws an exception when passed a document or `_id` from a different * collection, or if the document does not exist. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param options - Options for retrieving the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * try { * const document = await collection.document("abc123"); * console.log(document); * } catch (e: any) { * console.error("Could not find document"); * } * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const document = await collection.document("abc123", { graceful: true }); * if (document) { * console.log(document); * } else { * console.error("Document does not exist"); * } * ``` */ document(selector: DocumentSelector, options?: CollectionReadOptions): Promise>; /** * Retrieves the document matching the given key or id. * * Throws an exception when passed a document or `_id` from a different * collection, or if the document does not exist. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param graceful - If set to `true`, `null` is returned instead of an * exception being thrown if the document does not exist. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * try { * const document = await collection.document("abc123", false); * console.log(document); * } catch (e: any) { * console.error("Could not find document"); * } * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * const document = await collection.document("abc123", true); * if (document) { * console.log(document); * } else { * console.error("Document does not exist"); * } * ``` */ document(selector: DocumentSelector, graceful: boolean): Promise>; /** * Retrieves the documents matching the given key or id values. * * Throws an exception when passed a document or `_id` from a different * collection, or if the document does not exist. * * @param selectors - Array of document `_key`, `_id` or objects with either * of those properties (e.g. a document from this collection). * @param options - Options for retrieving the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * try { * const documents = await collection.documents(["abc123", "xyz456"]); * console.log(documents); * } catch (e: any) { * console.error("Could not find document"); * } * ``` */ documents(selectors: (string | ObjectWithKey)[], options?: CollectionBatchReadOptions): Promise[]>; /** * Inserts a new document with the given `data` into the collection. * * @param data - The contents of the new document. * @param options - Options for inserting the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * const result = await collection.save( * { _from: "users/rana", _to: "users/mudasir", active: false }, * { returnNew: true } * ); * ``` */ save(data: EdgeData, options?: CollectionInsertOptions): Promise; old?: Edge; }>; /** * Inserts new documents with the given `data` into the collection. * * @param data - The contents of the new documents. * @param options - Options for inserting the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * const result = await collection.saveAll( * [ * { _from: "users/rana", _to: "users/mudasir", active: false }, * { _from: "users/rana", _to: "users/salman", active: true } * ], * { returnNew: true } * ); * ``` */ saveAll(data: Array>, options?: CollectionInsertOptions): Promise; old?: Edge; }) | DocumentOperationFailure>>; /** * Replaces an existing document in the collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param newData - The contents of the new document. * @param options - Options for replacing the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * await collection.save( * { * _key: "musadir", * _from: "users/rana", * _to: "users/mudasir", * active: true, * best: true * } * ); * const result = await collection.replace( * "musadir", * { active: false }, * { returnNew: true } * ); * console.log(result.new.active, result.new.best); // false undefined * ``` */ replace(selector: DocumentSelector, newData: DocumentData, options?: CollectionReplaceOptions): Promise; old?: Edge; }>; /** * Replaces existing documents in the collection, identified by the `_key` or * `_id` of each document. * * @param newData - The documents to replace. * @param options - Options for replacing the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * await collection.save( * { * _key: "musadir", * _from: "users/rana", * _to: "users/mudasir", * active: true, * best: true * } * ); * await collection.save( * { * _key: "salman", * _from: "users/rana", * _to: "users/salman", * active: false, * best: false * } * ); * const result = await collection.replaceAll( * [ * { _key: "musadir", active: false }, * { _key: "salman", active: true, best: true } * ], * { returnNew: true } * ); * console.log(result[0].new.active, result[0].new.best); // false undefined * console.log(result[1].new.active, result[1].new.best); // true true * ``` */ replaceAll(newData: Array & ({ _key: string; } | { _id: string; })>, options?: CollectionReplaceOptions): Promise; old?: Edge; }) | DocumentOperationFailure>>; /** * Updates an existing document in the collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param newData - The data for updating the document. * @param options - Options for updating the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * await collection.save( * { * _key: "musadir", * _from: "users/rana", * _to: "users/mudasir", * active: true, * best: true * } * ); * const result = await collection.update( * "musadir", * { active: false }, * { returnNew: true } * ); * console.log(result.new.active, result.new.best); // false true * ``` */ update(selector: DocumentSelector, newData: Patch>, options?: CollectionUpdateOptions): Promise; old?: Edge; }>; /** * Updates existing documents in the collection, identified by the `_key` or * `_id` of each document. * * @param newData - The data for updating the documents. * @param options - Options for updating the documents. * ```js * const db = new Database(); * const collection = db.collection("friends"); * await collection.save( * { * _key: "musadir", * _from: "users/rana", * _to: "users/mudasir", * active: true, * best: true * } * ); * await collection.save( * { * _key: "salman", * _from: "users/rana", * _to: "users/salman", * active: false, * best: false * } * ); * const result = await collection.updateAll( * [ * { _key: "musadir", active: false }, * { _key: "salman", active: true, best: true } * ], * { returnNew: true } * ); * console.log(result[0].new.active, result[0].new.best); // false true * console.log(result[1].new.active, result[1].new.best); // true true * ``` */ updateAll(newData: Array> & ({ _key: string; } | { _id: string; })>, options?: CollectionUpdateOptions): Promise; old?: Edge; }) | DocumentOperationFailure>>; /** * Removes an existing document from the collection. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param options - Options for removing the document. * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * const doc = await collection.document("musadir"); * await collection.remove(doc); * // document with key "musadir" deleted * ``` */ remove(selector: DocumentSelector, options?: CollectionRemoveOptions): Promise; }>; /** * Removes existing documents from the collection. * * Throws an exception when passed any document or `_id` from a different * collection. * * @param selectors - Documents `_key`, `_id` or objects with either of those * properties (e.g. documents from this collection). * @param options - Options for removing the documents. * * @example * ```js * const db = new Database(); * const collection = db.collection("friends"); * await collection.removeAll(["musadir", "salman"]); * // document with keys "musadir" and "salman" deleted * ``` */ removeAll(selectors: DocumentSelector[], options?: CollectionRemoveOptions): Promise; }) | DocumentOperationFailure>>; /** * Bulk imports the given `data` into the collection. * * @param data - The data to import, as an array of edge data. * @param options - Options for importing the data. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * [ * { _key: "x", _from: "vertices/a", _to: "vertices/b", weight: 1 }, * { _key: "y", _from: "vertices/a", _to: "vertices/c", weight: 2 } * ] * ); * ``` */ import(data: EdgeData[], options?: CollectionImportOptions): Promise; /** * Bulk imports the given `data` into the collection. * * @param data - The data to import, as an array containing a single array of * attribute names followed by one or more arrays of attribute values for * each edge document. * @param options - Options for importing the data. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * [ * [ "_key", "_from", "_to", "weight" ], * [ "x", "vertices/a", "vertices/b", 1 ], * [ "y", "vertices/a", "vertices/c", 2 ] * ] * ); * ``` */ import(data: any[][], options?: CollectionImportOptions): Promise; /** * Bulk imports the given `data` into the collection. * * If `type` is omitted, `data` must contain one JSON array per line with * the first array providing the attribute names and all other arrays * providing attribute values for each edge document. * * If `type` is set to `"documents"`, `data` must contain one JSON document * per line. * * If `type` is set to `"list"`, `data` must contain a JSON array of * edge documents. * * If `type` is set to `"auto"`, `data` can be in either of the formats * supported by `"documents"` or `"list"`. * * @param data - The data to import as a Buffer (Node), Blob (browser) or * string. * @param options - Options for importing the data. * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * '{"_key":"x","_from":"vertices/a","_to":"vertices/b","weight":1}\r\n' + * '{"_key":"y","_from":"vertices/a","_to":"vertices/c","weight":2}\r\n', * { type: "documents" } // or "auto" * ); * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * '[{"_key":"x","_from":"vertices/a","_to":"vertices/b","weight":1},' + * '{"_key":"y","_from":"vertices/a","_to":"vertices/c","weight":2}]', * { type: "list" } // or "auto" * ); * ``` * * @example * ```js * const db = new Database(); * const collection = db.collection("some-collection"); * await collection.import( * '["_key","_from","_to","weight"]\r\n' + * '["x","vertices/a","vertices/b",1]\r\n' + * '["y","vertices/a","vertices/c",2]\r\n' * ); * ``` */ import(data: Buffer | Blob | string, options?: CollectionImportOptions & { type?: "documents" | "list" | "auto"; }): Promise; /** * Retrieves a list of all edges of the document matching the given * `selector`. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param options - Options for retrieving the edges. * * @example * ```js * const db = new Database(); * const collection = db.collection("edges"); * await collection.import([ * ["_key", "_from", "_to"], * ["x", "vertices/a", "vertices/b"], * ["y", "vertices/a", "vertices/c"], * ["z", "vertices/d", "vertices/a"], * ]); * const edges = await collection.edges("vertices/a"); * console.log(edges.map((edge) => edge._key)); // ["x", "y", "z"] * ``` */ edges(selector: DocumentSelector, options?: CollectionEdgesOptions): Promise>>; /** * Retrieves a list of all incoming edges of the document matching the given * `selector`. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param options - Options for retrieving the edges. * * @example * ```js * const db = new Database(); * const collection = db.collection("edges"); * await collection.import([ * ["_key", "_from", "_to"], * ["x", "vertices/a", "vertices/b"], * ["y", "vertices/a", "vertices/c"], * ["z", "vertices/d", "vertices/a"], * ]); * const edges = await collection.inEdges("vertices/a"); * console.log(edges.map((edge) => edge._key)); // ["z"] * ``` */ inEdges(selector: DocumentSelector, options?: CollectionEdgesOptions): Promise>>; /** * Retrieves a list of all outgoing edges of the document matching the given * `selector`. * * Throws an exception when passed a document or `_id` from a different * collection. * * @param selector - Document `_key`, `_id` or object with either of those * properties (e.g. a document from this collection). * @param options - Options for retrieving the edges. * * @example * ```js * const db = new Database(); * const collection = db.collection("edges"); * await collection.import([ * ["_key", "_from", "_to"], * ["x", "vertices/a", "vertices/b"], * ["y", "vertices/a", "vertices/c"], * ["z", "vertices/d", "vertices/a"], * ]); * const edges = await collection.outEdges("vertices/a"); * console.log(edges.map((edge) => edge._key)); // ["x", "y"] * ``` */ outEdges(selector: DocumentSelector, options?: CollectionEdgesOptions): Promise>>; } /** * @internal */ export declare class Collection = any, EntryInputType extends Record = EntryResultType> implements EdgeCollection, DocumentCollection { protected _name: string; protected _db: Database; /** * @internal */ constructor(db: Database, name: string); get isArangoCollection(): true; get name(): string; get(): Promise; exists(): Promise; create(options?: CreateCollectionOptions & { type?: CollectionType; }): Promise; properties(properties?: CollectionPropertiesOptions): Promise>; count(): Promise>; recalculateCount(): Promise; figures(details?: boolean): Promise; }>>; revision(): Promise>; checksum(options?: CollectionChecksumOptions): Promise>; loadIndexes(): Promise; rename(newName: string): Promise>; truncate(): Promise>; drop(options?: CollectionDropOptions): Promise; getResponsibleShard(document: Partial>): Promise; documentId(selector: DocumentSelector): string; documentExists(selector: DocumentSelector, options?: DocumentExistsOptions): Promise; documents(selectors: (string | ObjectWithKey)[], options?: CollectionBatchReadOptions): Promise; document(selector: DocumentSelector, options?: boolean | CollectionReadOptions): Promise; save(data: DocumentData, options?: CollectionInsertOptions): Promise; saveAll(data: Array>, options?: CollectionInsertOptions): Promise; replace(selector: DocumentSelector, newData: DocumentData, options?: CollectionReplaceOptions): Promise; replaceAll(newData: Array & ({ _key: string; } | { _id: string; })>, options?: CollectionReplaceOptions): Promise; update(selector: DocumentSelector, newData: Patch>, options?: CollectionUpdateOptions): Promise; updateAll(newData: Array> & ({ _key: string; } | { _id: string; })>, options?: CollectionUpdateOptions): Promise; remove(selector: DocumentSelector, options?: CollectionRemoveOptions): Promise; removeAll(selectors: (string | ObjectWithKey)[], options?: CollectionRemoveOptions): Promise; import(data: Buffer | Blob | string | any[], options?: CollectionImportOptions & { type?: "documents" | "list" | "auto"; }): Promise; protected _edges(selector: DocumentSelector, options?: CollectionEdgesOptions, direction?: "in" | "out"): Promise; edges(vertex: DocumentSelector, options?: CollectionEdgesOptions): Promise; inEdges(vertex: DocumentSelector, options?: CollectionEdgesOptions): Promise; outEdges(vertex: DocumentSelector, options?: CollectionEdgesOptions): Promise; indexes(options?: IndexListOptions): Promise; index(selector: IndexSelector): Promise; ensureIndex(options: EnsurePersistentIndexOptions | EnsureGeoIndexOptions | EnsureTtlIndexOptions | EnsureMdiIndexOptions | EnsureInvertedIndexOptions): Promise; dropIndex(selector: IndexSelector): Promise; compact(): Promise; } //# sourceMappingURL=collection.d.ts.map