-
Notifications
You must be signed in to change notification settings - Fork 1
Home
M ABD AZIZ ALFIAN edited this page Aug 16, 2023
·
114 revisions
Welcome to the fly-json-odm
wiki!
- Why should I use this
- Getting Started
- CRUD
- Query
- Transform
- Main Method
- Helper Method
- Comparison Operators
- Mixin
- Fuzzy Search
- Limitation
- Minimum Requirement
- Benchmark
TLDR;
Here is the benchmark to do queries with Fly Json ODM.
Most common queries with 1 million object arrays, tested in Real Browser.
fly-json-odm
is the ODM library to handle JSON on the fly like NOSQL
does. You are able to make manipulation of JSON like ORM. For example is to do Insert
, Read
, Update
, Modify
, Delete
, Join
, Query
and Transform
.
Here is the reason why you should use fly-json-odm
:
- Simply handle data table with json object in memory.
- Query json array with SQL Query logic.
- Restructuring or make operations in json.
- Manage memory storage cache.
- Manipulation dom table with json.
- Fuzzy Search Support.
- Flexible and Extendable with Mixin feature.
- NodeJS, Browser and Typescript support.
- Very fast to handle big data, see benchmark.
- Lightweight to use in browser (minified and gzipped size only 4.5 kB).
- Browser version use ES5 Standard (support for old browser).
$ npm install fly-json-odm
Or simply use in Browser with CDN
<!-- Always get the latest version -->
<!-- Not recommended for production sites! -->
<script src="https://cdn.jsdelivr.net/npm/fly-json-odm/dist/flyjson.min.js"></script>
<!-- Get minor updates and patch fixes within a major version -->
<script src="https://cdn.jsdelivr.net/npm/fly-json-odm@1/dist/flyjson.min.js"></script>
<!-- Get patch fixes within a minor version -->
<script src="https://cdn.jsdelivr.net/npm/fly-json-odm@1.21/dist/flyjson.min.js"></script>
<!-- Get a specific version -->
<!-- Recommended for production sites! -->
<script src="https://cdn.jsdelivr.net/npm/fly-json-odm@1.21.0/dist/flyjson.min.js"></script>
const FlyJson = require('fly-json-odm'); // in browser doesn't need this line
var nosql = new FlyJson();
// example data json
var data = [
{user_id:1,name:'budi',age:10},
{user_id:5,name:'wawan',age:20},
{user_id:3,name:'tono',age:30}
];
// Synchronous
var result = nosql.set(data)
.where('age', '>', 10)
.orderBy('age', true)
.exec();
console.log(result);
// Asynchronous
nosql.promisify((builder) => {return builder}).then((table) => {
var result = table.set(data)
.where('name', '==', 'wawan')
.exec();
console.log(result);
});
Note:
- Structure Data Table JSON must be an
Array
which is containsObject
like example above. -
fly-json-odm
is synchronous as default.
-
constructor(mixins={})
- Create instance or with inject your custom function via Mixin. [+ v1.19.0] -
.setMode(name)
- Set modeshallow
ordeep
. Default isdeep
. [+ v1.7.0] -
.set(data)
- Set data table. -
.insert(obj)
- Insert new single object into data table. -
.insertMany(obj)
- Insert new multiple object into data table. [+ v1.5.0] -
.update(id,value,obj)
- Update single data object in data table. -
.updateMany(id,value,obj)
- Update multiple data object in data table. [+ v1.5.0] -
.modify(id,value,obj)
- Modify or Add new key for single data object in data table. -
.modifyMany(id,value,obj)
- Modify or Add new key for multiple data object in data table. [+ v1.5.0] -
.delete(id,value)
- Delete single data object in data table. -
.deleteMany(id,value)
- Delete multiple data object in data table. [+ v1.5.0] -
.select(key)
- Filter data by select name key. -
.where(...args)
- Filter data by where. Please see comparison-operators. -
.begin()
- Beginning to build query with condition OR. -
.or()
- Add new OR condition. -
.end()
- Ending of build query with condition OR. -
.distinct(fieldName='')
- Remove duplicate data. [+ v1.10.0] -
.clean()
- Cleanup data table and all temporary object. -
.join(name,data)
- Join two data table. -
.merge(a,b)
- Merge two data table. -
.on(a,b,nested=true,caseSensitive=true)
- Set indentifier to joining two data table. -
.orderBy(name,desc=false,primer)
- Sort data ascending or descending by key name (support primer function). -
.groupBy(name,sumField=[])
- Grouping data or with sum field (sumfield is column name). [+ v1.1.0] -
.groupDetail(name,groupName='')
- Grouping data with detail nested. [+ v1.1.0] -
.skip(size)
- Skip data by size. -
.take(size)
- Take data by size. -
.paginate(page,page_size)
- Paginate data by page and page_size. -
.fuzzySearch(query,keys,caseSensitive=false,sort=false)
- An advanced search like search engine does. Please see Fuzzy Search. [+ v1.19.0] -
.exec()
- Return output of data table. -
.promisify(fn)
- Make asynchronous process with Promise.
-
.isString(value)
- Determine value is string. -
.isInteger(value)
- Determine value is integer. -
.isBoolean(value)
- Determine value is boolean. -
.isArray(value)
- Determine value is array. -
.isObject(value)
- Determine value is object. -
.isEmpty(value)
- Determine value is empty. -
.isEmptyArray(value)
- Determine value is empty and array. -
.isEmptyObject(value)
- Determine object value is empty. -
.fastCheckArrayObject(value)
- Determine value is an array object. [+ v1.21.0] -
.blockingTest(ms=1000)
- Blocking execution of code for asynchronous test. -
.foreach()
- Foreach for an array or object. [+ v1.3.0] -
.safeStringify(value,[space])
- Safe JSON.stringify to avoid type error converting circular structure to json. -
.shallowClone(array)
- Clone an array (shallow). -
.deepClone(array)
- Very safe deep clone an array. -
.jsonTransform(data, map)
- For restructuring and performing operations on JSON. Please see how to use jsonTransform. [+ v1.3.0] -
.fuzzy(haystack,query='',keys=[],caseSensitive=false,sort=false)
- An advanced search like search engine does. Please see Fuzzy Search. [+ v1.20.0]
Here is the comparison operator to use with .where(...args)
.
Example:
-
.where('address','jakarta')
- Default is===
; Case Sensitive. -
.where('address','!=','jakarta')
- Case Sensitive -
.where('address','like','Jakarta',false)
- Case Insensitive. -
.where('address','regex',/[a-j]/)
- Support Regex. - Support custom Function for advanced use.
.where('name', 'FUNCTION', function (value) { // example if we want to searching name for john doe return (value.toLowerCase().indexOf('john doe') !== -1); })
Name | Details | Version |
---|---|---|
= or ==
|
Equality | |
=== |
Strict Equality | |
!= |
Not Equals | |
!== |
Strict Not Equals | |
> |
Greater than | |
>= |
Greater than or equal | |
< |
Less than | |
<= |
Less than or equal | |
IN |
Checks if the value is within an array or object | [+ v1.4.0] |
IN LIKE |
Search the value is within an array or object | [+ v1.17.0] |
NOT IN |
Checks if the value is not within an array or object | [+ v1.11.0] |
NOT IN LIKE |
Search the value is not within an array or object | [+ v1.17.0] |
NOT |
Not Equals (same as != ) |
|
LIKE |
Search the value | |
NOT LIKE |
Search the value (opposite) | |
REGEX |
Regex search | [+ v1.2.0] |
FUNC |
Use function for advanced search (short version) | [+ v1.17.0] |
FUNCTION |
Use function for advanced search | [+ v1.9.0] |
- This is not like a client database library, so there is no adapter for connecting to popular database engine like
MySQL
,SQLite
,MongoDB
,etc
. - In this library there is no feature how to read JSON from
file
,stream
or something like that. If you need this, you can see this project fly-json-db. -
fly-json-odm
is using query function style. You can see this project fly-json-ql, if you are interest to do query withJsonQL
.
- Tested with NodeJS v10, but actually will work too for NodeJS v6.
- Browser as they support ES5