mirror of https://gitee.com/bigwinds/arangodb
92 lines
3.6 KiB
Plaintext
92 lines
3.6 KiB
Plaintext
!CHAPTER Hash Indexes
|
|
|
|
!SUBSECTION Introduction to Hash Indexes
|
|
|
|
This is an introduction to ArangoDB's hash indexes.
|
|
|
|
It is possible to define a hash index on one or more attributes (or paths) of a
|
|
document. This hash index is then used in queries to locate documents in O(1)
|
|
operations. If the hash index is unique, then no two documents are allowed to have the
|
|
same set of attribute values.
|
|
|
|
Creating a new document or updating a document will fail if the uniqueness is violated.
|
|
If the index is declared sparse, a document will be excluded from the index and no
|
|
uniqueness checks will be performed if any index attribute value is not set or has a value
|
|
of `null`.
|
|
|
|
!SECTION Accessing Hash Indexes from the Shell
|
|
|
|
<!-- js/server/modules/@arangodb/arango-collection.js-->
|
|
|
|
|
|
@brief ensures that a unique constraint exists
|
|
`collection.ensureIndex({ type: "hash", fields: [ "field1", ..., "fieldn" ], unique: true })`
|
|
|
|
Creates a unique hash index on all documents using *field1*, ... *fieldn*
|
|
as attribute paths. At least one attribute path has to be given.
|
|
The index will be non-sparse by default.
|
|
|
|
All documents in the collection must differ in terms of the indexed
|
|
attributes. Creating a new document or updating an existing document will
|
|
will fail if the attribute uniqueness is violated.
|
|
|
|
To create a sparse unique index, set the *sparse* attribute to `true`:
|
|
|
|
`collection.ensureIndex({ type: "hash", fields: [ "field1", ..., "fieldn" ], unique: true, sparse: true })`
|
|
|
|
In case that the index was successfully created, the index identifier is returned.
|
|
|
|
Non-existing attributes will default to `null`.
|
|
In a sparse index all documents will be excluded from the index for which all
|
|
specified index attributes are `null`. Such documents will not be taken into account
|
|
for uniqueness checks.
|
|
|
|
In a non-sparse index, **all** documents regardless of `null` - attributes will be
|
|
indexed and will be taken into account for uniqueness checks.
|
|
|
|
In case that the index was successfully created, an object with the index
|
|
details, including the index-identifier, is returned.
|
|
|
|
@startDocuBlockInline ensureUniqueConstraint
|
|
@EXAMPLE_ARANGOSH_OUTPUT{ensureUniqueConstraint}
|
|
~db._create("test");
|
|
db.test.ensureIndex({ type: "hash", fields: [ "a", "b.c" ], unique: true });
|
|
db.test.save({ a : 1, b : { c : 1 } });
|
|
db.test.save({ a : 1, b : { c : 1 } }); // xpError(ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED)
|
|
db.test.save({ a : 1, b : { c : null } });
|
|
db.test.save({ a : 1 }); // xpError(ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED)
|
|
~db._drop("test");
|
|
@END_EXAMPLE_ARANGOSH_OUTPUT
|
|
@endDocuBlock ensureUniqueConstraint
|
|
|
|
|
|
<!-- js/server/modules/@arangodb/arango-collection.js-->
|
|
|
|
|
|
@brief ensures that a non-unique hash index exists
|
|
`collection.ensureIndex({ type: "hash", fields: [ "field1", ..., "fieldn" ] })`
|
|
|
|
Creates a non-unique hash index on all documents using *field1*, ... *fieldn*
|
|
as attribute paths. At least one attribute path has to be given.
|
|
The index will be non-sparse by default.
|
|
|
|
To create a sparse unique index, set the *sparse* attribute to `true`:
|
|
|
|
`collection.ensureIndex({ type: "hash", fields: [ "field1", ..., "fieldn" ], sparse: true })`
|
|
|
|
In case that the index was successfully created, an object with the index
|
|
details, including the index-identifier, is returned.
|
|
|
|
@startDocuBlockInline ensureHashIndex
|
|
@EXAMPLE_ARANGOSH_OUTPUT{ensureHashIndex}
|
|
~db._create("test");
|
|
db.test.ensureIndex({ type: "hash", fields: [ "a" ] });
|
|
db.test.save({ a : 1 });
|
|
db.test.save({ a : 1 });
|
|
db.test.save({ a : null });
|
|
~db._drop("test");
|
|
@END_EXAMPLE_ARANGOSH_OUTPUT
|
|
@endDocuBlock ensureHashIndex
|
|
|
|
|