soq

Simple Object Query Interface for JSON Array

npm install soq
2 downloads in the last month
#SOQ
**Simple Object Query Interface for JSON Array**

##Synopsis

It's not going to be anther JSON Database. SOQ is made to find pure JSON Objects in a more elegant and unobstructive way. It may be extended to act as middle layer between client and server DB.

##Query Language
We accept a simple string a query conditions. And at least you shuold tell the query object which type of objects you want to find.

	var query = Query.build({
		type: "vehicle",
		conditions: "name = 'Ford'"
	});
	
In fact, the query interface have learned a bunch of condition types:

* =
* \>=
* \>
* \<=
* \<
* !=
* BEGINS_WITH
* ENDS_WITH
* MATCH
* TYPE_IS

And these condition operators are straightfoward.

It also should be noted that the value of a condition can be:

* Numbers: 1,2,3,0.5,1.4…
* Strings: "Hello", "Nice",…
* Reserved Words: true, false, null, undefined
	
What's more you can pass mutiple conditions:

	…
	conditions: "name = 'Ford' and age > 3 or price < 1000"
	…
	
Maybe you are wondering the priority of condtions. Yes, we don't support group conditions with parenthesises currently, which I have added into my TODO list. Anyway, I simply treat the former condition as the one with higher priority for now.

##Store
In most of time, you don't deal with Query class directly. A Store Class is provided as gateway to access your data;

A simple use case:

	var store = new Store();
	store.add({
		"name": "Ford",
		"type": "vehicle"
	}).add({
		"name": "BMW",
		"type": "vehicle"
    }).add({
		"name": "Bike",
		"type": "other"
    });

And then, we find what we want in this store:

    var r = store.find({
      type: "vehicle",
      conditions: "name BEGINS_WITH 'B'"
    });
    //result is always in form of an array
    //r[0].name == "BMW"

Also a getting-all-of-we-have method:
	
	var all = store.all("vehicle");
	//all.length === 2

Feel free to modify the objects you find in the store. But in the future, updating a record will be taken seriously with a specialized update method.

Removing a record:
	
	store.remove(r[0]);//BMW is gone from our store!
	
More examples can be found at */spec/*
	
##TODO

* Data source support for store
* Improving performance of Collection internal
* Improving traversal of logic tree by reducing the context gradually

##Changes
* 2012-3-12 16:24
	* Better support for reserved words
* 2012-3-14 21:50
	* Group conditions
	
##Contacts
You can find me:

* http://robinqu.me/
* http://twitter.com/robinqu
* http://weibo.com/robinqu
	
npm loves you