json-odm

0.2.4 • Public • Published

Build Status Code Climate Test Coverage npm npm npm GitHub stars GitHub issues

JSON ODM

by Konsultaner, Richard Burkhardt

This Project aims to be provide a json object document mapper.
Why would I need this?
There are many cases where you do not want to have the server query your data. You may also see this mapper as a fancy way to filter your data or prepare a view model. The original use case was an ionic app that was not interactive so providing a server backend was not needed, but structuring my data into joinable collections seemed very helpful.

And if you can use a server you may consider our new WebSocket server project "connectanum" for Publish/Subscribe and RPC communication

If you like the project please support it with a star here on GitHub

If commercial support is needed please contact me.

Docs

You can find the documentation here or compiled to the folder /docs/gen/*.

Road map

  • Implement query methods from mongo db
    • Comparison 100%
      • $eq
      • $gt
      • $gte
      • $lt
      • $lte
      • $ne
      • $in
      • $nin
    • Logical 100%
      • $or
      • $and
      • $not(= $nand as alias)
      • $nor
    • Element 100% (+ $isNull, for is null or undefined)
      • $exists
      • $type
    • Evaluation 100%
      • $mod
      • $regex
      • $text
      • $where
    • Geospatial 50% (maybe have a hard and a soft check -> performance)
      • $geoWithin
      • $geoIntersects
      • $near
      • $nearSphere
    • Array 0% i may not implement the first two
      • $all
      • $elementMatch
      • $size
    • Aggregation
      • Pipeline 30% ($limit and $skip is implemented as $result(skip,limit))
        • $project
        • $match
        • $redact
        • $limit
        • $skip
        • $unwind
        • $sort
        • $geoNear
        • $out
      • Grouping 70% ($count is used to count the results)
        • $group
        • $count
        • $sum
        • $avg
        • $first
        • $last
        • $min
        • $max
        • $push
        • $addToSet
      • Operators 20% ($mod is renamed $modulo, because Evaluation has a $mod)
        • Boolean
        • Set
        • Comparison
        • Arithmetic
        • String
        • Array
        • Date
        • Conditional
        • Variable
        • Grouping
  • Support Promise/A+ sources for the odm.addSource
  • Full CRUD support
  • Aggregation

Install from NPM-Package

npm install json-odm

Build and run tests, both minified and unminified

npm install json-odm
cd npm_modules/json-odm/
npm install
gulp

Browser Support

Unit test ran successfully under Chrome,iOS7+,IE9+,Firefox,Android 4.4.2+
To be tested: Safari on OSX, IE8(test driver does not run in IE < 9 so it will be hard to test)

Example

This is only a basic example. Find a lot more in the docs, i.e. how to use $geoWithin

<!-- add minified version from https://github.com/konsultaner/jsonOdm/tree/master/bin to the html head -->
<script type="text/javascript" src="js/json.odm.min.js"></script>
// initialize The mapper
var odm = new jsonOdm();
// add a source to the mapper
odm.addSource('people',{
   "Person" : [
       {"id":1,"name":"Richi",jobId:1,hobbyIds:[1,3,4]},
       {"id":2,"name":"Dave",jobId:2,hobbyIds:[2,4]},
       {"id":3,"name":"Tom",jobId:3,hobbyIds:[3,5]},
       {"id":4,"name":"Lisa",jobId:4,hobbyIds:[1,2,3]},
       {"id":5,"name":"Hanni",jobId:3,hobbyIds:[1,5]},
       {"id":6,"name":"Selma",jobId:3,hobbyIds:[1,4]},
       {"id":7,"name":"Ralf",jobId:1,hobbyIds:[4,3]}
   ],
   "Jobs" : [
       {"id":1,"name":"plumber"},
       {"id":2,"name":"programmer"},
       {"id":3,"name":"chef"},
       {"id":4,"name":"hairdresser"}
   ],
   "Hobbies" : [
       {"id":1,"name":"swimming"},
       {"id":2,"name":"cycling"},
       {"id":3,"name":"fishing"},
       {"id":4,"name":"coding"},
       {"id":5,"name":"dancing"}
   ]
},true);
// instantiate a collection object
var people = new odm.Collection('Person');
people.$hasOne("jobId","id","Jobs","job");
people.$hasMany("hobbyIds","id","Hobbies","hobbies");
 
var q = people.$query();
// get all hairdresser and plumber
var hairdresser = q.$or(
    q.$branch("jobId").$eq(1),
    q.$branch("jobId").$eq(4)
).$all();
 
// get all but hairdressers and plumbers
var hairdresser = q.$and(
   q.$branch("jobId").$ne(1),
   q.$branch("jobId").$ne(4)
).$all();
 
// delete all plumbers
q.$branch("job","name").$eq("plumber").$delete();

Package Sidebar

Install

npm i json-odm

Weekly Downloads

2

Version

0.2.4

License

MIT

Unpacked Size

4.39 MB

Total Files

79

Last publish

Collaborators

  • konsultaner