0.1.2 • Published 8 years ago

rxjsrel v0.1.2

Weekly downloads
6
License
MIT
Repository
github
Last release
8 years ago

rxjsrel

RxJS based library for relational data processing.

npm version

Install

npm i rxjsrel

Usage

const RxJSRel = require('rxjsrel');
const Relations = RxJSRel.Relations

Examples

Note!

You can get sets of data for examples here: book-store, big-stub-store.

Merge two tables by key

'use strict';

const Relations = require('rxjsrel').Relations;
const data = require('./book-store');

const rel = new Relations(
  data.authors,
  data.books,
  {
    keys: {
      left: 'name',
      right: 'author'
    },
    transform: Relations.getDefaultTransformer()
  }
);

rel
  .join()
  .toArray()
  .subscribe(x => console.log(x));

Merge two arrays and after - filter them

'use strict';

const Relations = require('rxjsrel').Relations;
const data = require('./book-store');

const rel = new Relations(
  data.authors,
  data.books,
  {
    keys: {
      left: 'name',
      right: 'author'
    },
    transform: rec => {
      if (rec[1].date) {
        rec[1].date = new Date(rec[1].date);
      }

      return Relations.getDefaultTransformer()(rec)
    }
  }
);

rel
  .join({
    condition: rec => rec.language === 'German'
  })
  .toArray()
  .subscribe(x => console.log(x));

In this case you will get only one record (language === 'German'). Also date field will be transformed to Javascript date format.

Next example illustrates grouping of merged set of data by expected criteria

'use strict';

const Relations = require('rxjsrel').Relations;
const data = require('./book-store');

const rel = new Relations(
  data.authors,
  data.books,
  {
    keys: {
      left: 'name',
      right: 'author'
    },
    transform: Relations.getDefaultTransformer()
  }
);

rel
  .join()
  .groupBy(rec => rec.author)
  .mergeMap(group => group
    .toArray()
    .map(items => {
      return {author: group.key, booksCount: items.length}
    })
  )
  .subscribe(x => console.log(x));

Merged set was grouped by author. Result of the grouping is count of books by related author.

{ author: 'Beverly Cleary', booksCount: 4 }
{ author: 'David Sedaris', booksCount: 3 }
{ author: 'Franz Kafka', booksCount: 3 }
{ author: 'Johann Wolfgang Von Goethe', booksCount: 8 }

Next example illustrates inner conditions. Inner conditions will apply before merging.

This technique is needed for big sets of data processing. We have a big data set, but next example will work quickly due to inner conditions. (ie filtering before merging).

'use strict';

const Relations = require('rxjsrel').Relations;
const data = require('./big-stub-store');

let namesArr = [`book 5`, `book 7`];
let authorArr = ['author #20', 'author #2000'];

const rel = new Relations(
  data.authors,
  data.books,
  {
    keys: {
      left: 'name',
      right: 'author'
    },
    transform: Relations.getDefaultTransformer()
  }
);

rel
  .join({
    conditions: {
      left: rec => authorArr.indexOf(rec.name) >= 0,
      right: rec => namesArr.indexOf(rec.title) >= 0
    }
  })
  .toArray()
  .subscribe(x => console.log(x));
0.1.2

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago