0.1.3 • Published 12 years ago
arraydb v0.1.3
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] arraydbClient-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:
queryAnything: The query. Can be any JS value.limitNumber: Optional (default toInfinity).offsetNumber: Optional (default to0).reverseBoolean: Optional (default tofalse). Reverse the query.strictBoolean: 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'; // trueStrict 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
NaNmatch 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 });