mirror of https://github.com/seald/nedb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
6.9 KiB
167 lines
6.9 KiB
3 years ago
|
<a name="Index"></a>
|
||
|
|
||
|
## Index
|
||
|
<p>Indexes on field names, with atomic operations and which can optionally enforce a unique constraint or allow indexed
|
||
|
fields to be undefined</p>
|
||
|
|
||
|
**Kind**: global class
|
||
|
|
||
|
* [Index](#Index)
|
||
|
* [new Index(options)](#new_Index_new)
|
||
|
* [.fieldName](#Index+fieldName) : <code>string</code>
|
||
|
* [.unique](#Index+unique) : <code>boolean</code>
|
||
|
* [.sparse](#Index+sparse) : <code>boolean</code>
|
||
|
* [.treeOptions](#Index+treeOptions) : <code>Object</code>
|
||
|
* [.tree](#Index+tree) : <code>AVLTree</code>
|
||
|
* [.reset([newData])](#Index+reset)
|
||
|
* [.insert(doc)](#Index+insert)
|
||
|
* [.remove(doc)](#Index+remove)
|
||
|
* [.update(oldDoc, [newDoc])](#Index+update)
|
||
|
* [.revertUpdate(oldDoc, [newDoc])](#Index+revertUpdate)
|
||
|
* [.getMatching(value)](#Index+getMatching) ⇒ [<code>Array.<document></code>](#document)
|
||
|
* [.getBetweenBounds(query)](#Index+getBetweenBounds) ⇒ [<code>Array.<document></code>](#document)
|
||
|
* [.getAll()](#Index+getAll) ⇒ [<code>Array.<document></code>](#document)
|
||
|
|
||
|
<a name="new_Index_new"></a>
|
||
|
|
||
|
### new Index(options)
|
||
|
<p>Create a new index
|
||
|
All methods on an index guarantee that either the whole operation was successful and the index changed
|
||
|
or the operation was unsuccessful and an error is thrown while the index is unchanged</p>
|
||
|
|
||
|
|
||
|
| Param | Type | Default | Description |
|
||
|
| --- | --- | --- | --- |
|
||
|
| options | <code>object</code> | | |
|
||
|
| options.fieldName | <code>string</code> | | <p>On which field should the index apply (can use dot notation to index on sub fields)</p> |
|
||
|
| [options.unique] | <code>boolean</code> | <code>false</code> | <p>Enforces a unique constraint</p> |
|
||
|
| [options.sparse] | <code>boolean</code> | <code>false</code> | <p>Allows a sparse index (we can have documents for which fieldName is <code>undefined</code>)</p> |
|
||
|
|
||
|
<a name="Index+fieldName"></a>
|
||
|
|
||
|
### index.fieldName : <code>string</code>
|
||
|
<p>On which field the index applies to (may use dot notation to index on sub fields).</p>
|
||
|
|
||
|
**Kind**: instance property of [<code>Index</code>](#Index)
|
||
|
<a name="Index+unique"></a>
|
||
|
|
||
|
### index.unique : <code>boolean</code>
|
||
|
<p>Defines if the index enforces a unique constraint for this index.</p>
|
||
|
|
||
|
**Kind**: instance property of [<code>Index</code>](#Index)
|
||
|
<a name="Index+sparse"></a>
|
||
|
|
||
|
### index.sparse : <code>boolean</code>
|
||
|
<p>Defines if we can have documents for which fieldName is <code>undefined</code></p>
|
||
|
|
||
|
**Kind**: instance property of [<code>Index</code>](#Index)
|
||
|
<a name="Index+treeOptions"></a>
|
||
|
|
||
|
### index.treeOptions : <code>Object</code>
|
||
|
<p>Options object given to the underlying BinarySearchTree.</p>
|
||
|
|
||
|
**Kind**: instance property of [<code>Index</code>](#Index)
|
||
|
<a name="Index+tree"></a>
|
||
|
|
||
|
### index.tree : <code>AVLTree</code>
|
||
|
<p>Underlying BinarySearchTree for this index. Uses an AVLTree for optimization.</p>
|
||
|
|
||
|
**Kind**: instance property of [<code>Index</code>](#Index)
|
||
|
<a name="Index+reset"></a>
|
||
|
|
||
|
### index.reset([newData])
|
||
|
<p>Reset an index</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|
||
|
|
||
|
| Param | Type | Description |
|
||
|
| --- | --- | --- |
|
||
|
| [newData] | [<code>document</code>](#document) \| [<code>?Array.<document></code>](#document) | <p>Data to initialize the index with. If an error is thrown during insertion, the index is not modified.</p> |
|
||
|
|
||
|
<a name="Index+insert"></a>
|
||
|
|
||
|
### index.insert(doc)
|
||
|
<p>Insert a new document in the index
|
||
|
If an array is passed, we insert all its elements (if one insertion fails the index is not modified)
|
||
|
O(log(n))</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|
||
|
|
||
|
| Param | Type | Description |
|
||
|
| --- | --- | --- |
|
||
|
| doc | [<code>document</code>](#document) \| [<code>Array.<document></code>](#document) | <p>The document, or array of documents, to insert.</p> |
|
||
|
|
||
|
<a name="Index+remove"></a>
|
||
|
|
||
|
### index.remove(doc)
|
||
|
<p>Removes a document from the index.
|
||
|
If an array is passed, we remove all its elements
|
||
|
The remove operation is safe with regards to the 'unique' constraint
|
||
|
O(log(n))</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|
||
|
|
||
|
| Param | Type | Description |
|
||
|
| --- | --- | --- |
|
||
|
| doc | [<code>Array.<document></code>](#document) \| [<code>document</code>](#document) | <p>The document, or Array of documents, to remove.</p> |
|
||
|
|
||
|
<a name="Index+update"></a>
|
||
|
|
||
|
### index.update(oldDoc, [newDoc])
|
||
|
<p>Update a document in the index
|
||
|
If a constraint is violated, changes are rolled back and an error thrown
|
||
|
Naive implementation, still in O(log(n))</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|
||
|
|
||
|
| Param | Type | Description |
|
||
|
| --- | --- | --- |
|
||
|
| oldDoc | [<code>document</code>](#document) \| <code>Array.<{oldDoc: document, newDoc: document}></code> | <p>Document to update, or an <code>Array</code> of <code>{oldDoc, newDoc}</code> pairs.</p> |
|
||
|
| [newDoc] | [<code>document</code>](#document) | <p>Document to replace the oldDoc with. If the first argument is an <code>Array</code> of <code>{oldDoc, newDoc}</code> pairs, this second argument is ignored.</p> |
|
||
|
|
||
|
<a name="Index+revertUpdate"></a>
|
||
|
|
||
|
### index.revertUpdate(oldDoc, [newDoc])
|
||
|
<p>Revert an update</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|
||
|
|
||
|
| Param | Type | Description |
|
||
|
| --- | --- | --- |
|
||
|
| oldDoc | [<code>document</code>](#document) \| <code>Array.<{oldDoc: document, newDoc: document}></code> | <p>Document to revert to, or an <code>Array</code> of <code>{oldDoc, newDoc}</code> pairs.</p> |
|
||
|
| [newDoc] | [<code>document</code>](#document) | <p>Document to revert from. If the first argument is an Array of {oldDoc, newDoc}, this second argument is ignored.</p> |
|
||
|
|
||
|
<a name="Index+getMatching"></a>
|
||
|
|
||
|
### index.getMatching(value) ⇒ [<code>Array.<document></code>](#document)
|
||
|
<p>Get all documents in index whose key match value (if it is a Thing) or one of the elements of value (if it is an array of Things)</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|
||
|
|
||
|
| Param | Type | Description |
|
||
|
| --- | --- | --- |
|
||
|
| value | <code>Array.<\*></code> \| <code>\*</code> | <p>Value to match the key against</p> |
|
||
|
|
||
|
<a name="Index+getBetweenBounds"></a>
|
||
|
|
||
|
### index.getBetweenBounds(query) ⇒ [<code>Array.<document></code>](#document)
|
||
|
<p>Get all documents in index whose key is between bounds are they are defined by query
|
||
|
Documents are sorted by key</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|
||
|
|
||
|
| Param | Type | Description |
|
||
|
| --- | --- | --- |
|
||
|
| query | <code>object</code> | <p>An object with at least one matcher among $gt, $gte, $lt, $lte.</p> |
|
||
|
| [query.$gt] | <code>\*</code> | <p>Greater than matcher.</p> |
|
||
|
| [query.$gte] | <code>\*</code> | <p>Greater than or equal matcher.</p> |
|
||
|
| [query.$lt] | <code>\*</code> | <p>Lower than matcher.</p> |
|
||
|
| [query.$lte] | <code>\*</code> | <p>Lower than or equal matcher.</p> |
|
||
|
|
||
|
<a name="Index+getAll"></a>
|
||
|
|
||
|
### index.getAll() ⇒ [<code>Array.<document></code>](#document)
|
||
|
<p>Get all elements in the index</p>
|
||
|
|
||
|
**Kind**: instance method of [<code>Index</code>](#Index)
|