TaffyDB is an opensouce library that brings database features into your JavaScript applications.
But the real power comes into play once we start filtering for
records. Think of this filtering as using data selectors (if you know
jQuery) or building the a database query "where" clause (if you know
databases).
Keeping this JavaScript centric, we use an object literal to do the record lookup. No ugly string concatenations here.
Now that we understand basic filters lets look at some of the options we have for filtering
There are a lot more types of filtering including options to ignore
case, use functions or regular expressions, and traverse objects within
your database.
So now that you have your query lets look at some of the methods you can use to work with the data it has access to.
Now let's insert another post:
Finally let's do a remove:
Introduction
How you ever noticed how JavaScript object literals look a lot like records? And that if you wrap a group of them up in an array you have something that looks a lot like a database table? TaffyDB is a libary to bring powerful database funtionality to that concept and rapidly improve the way you work with data inside of JavaScript.What makes it sticky
- Extremely fast
- Powerful JavaScript centric data selection engine
- Database inspired features such as count, update, and insert
- Robust cross browser support
- Easily extended with your own functions
- Compatible with any DOM library (jQuery, YUI, Dojo, etc)
Creating a JavaScript Database
Let's create a database containing a collection of posts one might find on service like Twitter or Facebook.
1
2
3
4
5
6
7
8
9
| var newsfeed = TAFFY([ { "id" :1, "user" : "kmart77" , "stars" :3, "text" : "JavaScript is a meal best served cold" }, { "id" :2, "user" : "lukeisyourfather" , "stars" :5, "text" : "Anyone want to meet tonight at Fado?" }, { "id" :3, "user" : "bemine" , "stars" :3, "text" : "I reallylike the new prirotity inbox #gmail" }, { "id" :4, "user" : "keepit" , "stars" :3, "text" : "Laughing at this weeks fails video." }, { "id" :5, "user" : "piegirl22" , "stars" :3, "text" : "It is impossible to change your clothes in a public bathroom. Ick." }, { "id" :6, "user" : "kmart77" , "stars" :3, "text" : "@kmart77: Have fun in New York!" }, { "id" :7, "user" : "justinb" , "stars" :5, "text" : "Please set the noise level to earthquake" } ]); |
Filtering for data
Now we have a TaffyDB collection containing the JSON objects (records) we passed in. Using the extensive API we can start accessing and working with our data.
1
2
| newsfeed().count() // returns 7 newsfeed.sort( "user" ) // sort records by username |
1
2
| newsfeed({user: "kmart77" }).count() // returns 1 // filter for posts where user is equal to kmart77 |
Now that we understand basic filters lets look at some of the options we have for filtering
1
2
3
4
5
6
| newsfeed({text:{ends: "#gmail" }}).count() // returns 1 // filter for posts where text ends with #gmail // you can also use starts newsfeed({stars:{gt:3}}).count() // returns 2 // filter for posts where the star rating is greater than 3 |
Working with data
When you filter for data you create a query. If you assign this query to a variable you can pass it around. It is not static and the data will be updated if other logic changes the underling records.
1
2
| var kmart77 = newsfeed({user: "kmart77" }); // kmart77 is now a first class variable and can be passed to functions |
1
2
3
4
5
6
7
8
9
| kmart77.each( function (r) { alert(r.text); }) // for each record, call the function you've provided and alert the text of the post kmart77.select(text) // returns an array with the text of each post var kmart77_5Star = kmart77.filter({stars:5}); // apply another filter kmart77_5Star.count() // returns 0 kmart77.count() // still returns 1 |
Modifying data
Let's make a basic change to a record:
1
2
| newsfeed({id: "1" }).update({stars:5}); // updates the star rating, returns a query object |
1
2
| newsfeed.insert({ "id" :8, "user" : "justinb" , "stars" :3, "text" : "Have a great weekend everyone!" }); //inserts a new record |
1
2
| newsfeed({user: "kmart77" }).remove(); //removes all records for user kmart77 |
|
No comments:
Post a Comment