NeDB

Version 1.0.0

Introspective Systems, LLC.


This module is a wrapper for the npm package NeDB.

Module Definition Parameters

Filename

NeDB only requires one parameter in its module definition, "Filename", which is the name of the database file. The database will be loaded from the file if it already exists, or the file will be created if it is a new database.

Example

{
  "NeDB": {
    "Module": "xGraph.NeDB",
    "Par": {
      "Filename": "./database.nedb"
    }
  }
}

Reset

Optionally, if you would like the database to reset when the system is restarted, you can Provide it a parameter of "Reset": true.

Example

{
  "NeDB": {
    "Module": "xGraph.NeDB",
    "Par": {
      "Filename": "./database.nedb",
      "Reset": true
    }
  }
}

Input Commands

Insert

To insert a document into the database, send an 'Insert' command with a com.Document object.

The object will be stored in the database and will have a string ID referenced at _id. 'Insert' returns an object with the key com.Document._id so you can reference your document later by ID.

Example

this.send({
  Cmd: 'Insert',
  Document: {
    Example: 'Document',
    Data: [
      1, 2, 3, 4, 5
    ]
  }
}, this.Par.Database, (err, cmd) => {
  log.i('the document\'s new id is ' + cmd.Document._id);
});

Find

The 'Find' command is used to retrieve documents. The command object must include a query object, com.Where.

The only guaranteed way to retrieve a single document is by its _id. However, you can also return the set of all documents that meet a set of conditions.

The 'Find' command requires a query object, com.Where. This query object specifies what your query string is looking for.

For example, given a database of documents,

[
  {"_id": 0, "name": "billy", "pet": "cat"},
  {"_id": 1, "name": "bob", "pet": "dog"},
  {"_id": 2, "name": "susie", "pet": "none"},
  {"_id": 3, "name": "alice", "pet": "none"},
  {"_id": 4, "name": "joe", "pet": "cat"},
  {"_id": 5, "name": "mary", "pet": "lizard"}
]

the code

let cmd = {
            Cmd: 'Find',
            Where: {
                pet: 'cat'
            }
          };

this.send(cmd, this.Par.Database, callback);

function callback(err, cmd){
  for(let doc of cmd.Documents) {
    log.i(JSON.stringify(doc));
  }
}

will print out

{"_id": 0, "name": "billy", "pet": "cat"}
{"_id": 4, "name": "joe", "pet": "cat"}
Remove

The 'Remove' command deletes a document (or many at once). The command object must include a query object, com.Where.

The only guaranteed way to retrieve a single document is by its _id. However, you can also return the set of all documents that meet a set of conditions.

The 'Remove' command requires a query object, com.Where. This query object specifies what your query string is looking for.

'Remove' returns the number of documents that were deleted in com.DeletedCount.

For example, given a database of documents,

[
  {"_id": 0, "name": "billy", "pet": "cat"},
  {"_id": 1, "name": "bob", "pet": "dog"},
  {"_id": 2, "name": "susie", "pet": "none"},
  {"_id": 3, "name": "alice", "pet": "none"},
  {"_id": 4, "name": "joe", "pet": "cat"},
  {"_id": 5, "name": "mary", "pet": "lizard"}
]

the code

let cmd = {
            Cmd: 'Remove',
            Where: {
              pet: 'cat'
            }
          };

this.send(cmd, this.Par.Database, callback);

function callback(err, cmd){
  log.i(cmd.DeletedCount);
}

will print out

2

and leave you with the database:

[
  {"_id": 1, "name": "bob", "pet": "dog"},
  {"_id": 2, "name": "susie", "pet": "none"},
  {"_id": 3, "name": "alice", "pet": "none"},
  {"_id": 5, "name": "mary", "pet": "lizard"}
]