Awesome
ArrayDB
Use your arrays as DB tables, and make queries on them.
Install
This library was mostly written for the client-side, but it’s available as a nppm package.
Node.js
[sudo] npm install [-g] arraydb
Client-side
Use the src/arraydb.js
file.
Usage
ArrayDB objects expose one method, .query
, which use pattern-matching:
var ArrayDB = require( 'arraydb' ).ArrayDB;
var a = new ArrayDB([
{ name: "Foo", age: 42 },
{ name: "Bar", age: 24 },
{ name: "Moo", age: 42 }
]);
a.query({ age: 42 }); // [ { name:"Foo", age:42 }, { name:"Moo",age:42} ]
It takes an object with the key below:
query
[Anything]: The query. Can be any JS value.limit
[Number]: Optional (default toInfinity
).offset
[Number]: Optional (default to0
).reverse
[Boolean]: Optional (default tofalse
). Reverse the query.strict
[Boolean]: Optional (default totrue
). Define the matching mode of the query (see below).
You can also monkey-patch Array
objects:
var ArrayDB = require( 'arraydb' ).ArrayDB;
ArrayDB.monkeyPatch();
typeof [].query === 'function'; // true
Strict mode
.query
works in strict mode by default. In this mode, objects have to be
strictly equal to be matched. You can specify the mode using an object:
var a = new ArrayDB( NaN, 'foo' );
a.query({ query: NaN }); // [ NaN ]
a.query({ query: NaN, strict: true }); // [ NaN ]
a.query({ query: NaN, strict: false }); // [ NaN, 'foo' ]
Non-Strict mode
Non-strict mode provide some helpers to match elements:
- Regexps can be used to test strings
- Functions can be used to test anything
- Booleans match truthy (and falsy) elements
NaN
match any non-number (whereisNaN(element)
is true)
var a = new ArrayDB(
{ age: 2, name: "Bar" },
{ age: 46, name: "Foo" },
{ name: "NoAge" }
);
// returns only objects with an `age` property
a.query({ query: { age: true }, strict: false });
// returns only names that start with "F"
a.query({ query: { name: /^F/ }, strict: false });
Also, ArrayDB
provides some helpers:
.lt( e )
: match elements lesser thane
.gt( e )
: match elements greater thane
.le( e )
: match elements lesser than, or equal toe
.ge( e )
: match elements greater than, or equal toe
.eq( e )
: match elements equal toe
.ne( e )
: match elements that are not equal toe
.any()
: match anything
var a = new ArrayDB(
{ name: "John Doe", age: 23 },
{ name: "Foo Bar", age: 12 },
{ name: "Bar Foo", age: 35 },
{ name: "Bar Moo", age: 42 }
);
// match only objects with a .age property greater than 18
a.query({ query: { age: ArrayDB.gt( 18 ) }, strict: false });
// match only objects with an .age property equal to 42
a.query({ query: { age: ArrayDB.eq( 42 ) }, strict: false });