npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

dexteritydb

v0.4.5

Published

Node.js driver for DexterityDB

Downloads

2

Readme

dexteritydb-node

npm

The official Node.js driver for DexterityDB. Provides a high-level API for use in node based applications.

Getting Started

The easiest way to start using the DexterityDB Node.js driver is to use the node package manager:

npm install dexteritydb

Then add the following to your Node.js script:

const { Dex } = require("dexteritydb");

That's it! That's all you need to start using the DexterityDB Node.js driver.

Basic Usage

Dex Class

The DexterityDB Node.js driver was designed to be easy to use. It was built to be as dextrous and as flexible as possible, while still providing all of the feature capabilities that you might need to write powerful applications and scripts.

All programs written with the DexterityDB node driver begin with an instance of the Dex class. The Dex class is a database object that contains all of the methods that you might need to start using DexterityDB. It is recommended to use a single instance of Dex in any single piece of code.

let db = new Dex('http://localhost:3000');

The Dex constructor accepts two optional parameters. The first parameter, as shown above, is the endpoint of the DexterityDB instance that you want to connect up to. If an address is given, the driver will attempt to connect immediately upon generation of the Dex object. The second optional parameter, not shown in the example above, is a flag that indicates whether or not you want the driver to try to reconnect to the database after a disconnection. By default, this parameter is true.

Due to how the DexterityDB Node.js driver queues messages, the line of code shown above does not need to complete before queries are run in sequential lines. For this reason, we do not handle, nor do we even create, a promise in the constructor of Dex instances or in its connect method. The driver will do the hard work of making sure the database is connected before sending requests.

Example Walkthrough

The following lines of code can be run in the node driver. We will walk through this example and what it does below. It is important to note that the node driver is asynchronous so the example below uses promises to execute syncronously:

async function main() {
    const example = db.collection("example");
    await example.insert({ name: "John", age: 35 }, { name: "Jane", age: 28 });
    await example.index("name");
    example.find({ name: "John" }).fetchAll().then((result) => {
        console.log(results);
    });
}

main();

Collection Class

The Collection class is the second most used class in the DexterityDB node driver. The Collection class is instantiated with a simple collection function call from a Dex instance. This can be seen in the first line of the main function:

const example = db.collection("example");

We pass the example string to the collection call to indicate that we are working on the example collection.

Insert

The second line of the main function shows a simple insert call:

await example.insert({ name: "John", age: 35 }, { name: "Jane", age: 28 });

Any number of JSON objects can be passed into the insert function. Simply treat each object as a separate parameter in the function call or pass an array of objects.

Indexing

One of the things that makes DexterityDB special is the requirement of indexing any fields that you may want to search on. Once indexed, a field becomes immediately searchable. Any previously inserted items, as well as any future inserted items will automatically be indexed by the designated field. This is best practice in the database world. It is a bit different than some other databases' approaches, but we feel that encouraging best practices is how we can make everyone's experience with DexterityDB more simple and enjoyable. Usually, we would encourage indexing at the beginning of the script, but for ease of comprehension, we have done it after the insert. The third line of the example reads:

await example.index("name");

Indexing is easy. The above example proves that. Simply pass in the field that you want to index and it will become instantly searchable. DexterityDB does the rest.

Find and Fetch

The DexterityDB driver utilizes chained commands to provide the user with a language that is very easy to use and easy to understand. Find is a key method that can be chained on a collection call. It can be used to retrieve (or fetch) results, as well as updating and removing items in the database. The fourth line in the main function shows off this capability:

example.find({ name: "John" }).fetchAll().then((result) => {
    console.log(results);
});

Just to reiterate, the field that we search on MUST be indexed. If you missed the indexing step, please go up a few mouse scrolls and reread the indexing section.

To search for something in the database, first we use .find and pass the object pattern that we are looking for. The pattern in the example indicates that we are looking for all items that have the name, "John", as the value under the indexed field, "name."

Since there are many things that we can do with a query result on the database side, there are many methods that can be chained onto the find method. For this example, we use fetchAll, an intuitive function. FetchAll returns all of the objects that fit the find query. No parameters required (some allowed!). See the fetch or fetchAll documentation for more information on optional parameters.

Alternatively, the above example can be written as such:

example.find({ name: "John" }).fetch().then((cursor) => {
    cursor.collect().then((results) => {
        console.log(results);
    })
});

This setup shows off the Cursor object, which allows for streaming fetch results. The Cursor makes retrieving results more efficient, because one or more items can be retrieved and used at a time, when they are needed. In this example we simply collect all of them to show that this is equivalent to the fetchAll shown in the last example.

As stated earlier, DexterityDB is asynchronous, so we use a .then to consume the promises and print the results.

That's it! You now have all of the information you need to get started with the DexterityDB Node.js driver. But don't stop there...check out the full DexterityDB Node.js API Tutorial for all of the options and chainable methods that exist on the driver.

Happy Dexing!

Helpful Links

DexterityDB Node.JS API Tutorial Node.JS Driver GitHub

For Contributors

The DexterityDB Node.js driver is written mostly in TypeScript. It is compiled into Javascript using the Typescript compiler.

Documentation is generated using JSDoc with the Docdash template, customized with Hotdoc.

Note: To install necessary npm packages, you will need Python 2.7.13.

To make changes to driver, download the repository and execute npm install to get all relevant packages.

After making changes to the TypeScript files or adding/modifying JSDoc documentation, simply execute npm run build. This will build all javascript files and all documentation and you'll be good to go!