A JavaScript data aggregation pipeline based on the MongoDB database's aggregation framework. https://riveragroup.github.io/mungedb-aggregate/

Kyle P Davis f25efd7ad0 matcher: fix misc minor debug output issues před 10 roky
bench 0b8c3d52e3 EAGLESIX-4483: add doc src micro benchmarks w/ results před 10 roky
lib f25efd7ad0 matcher: fix misc minor debug output issues před 10 roky
npm_scripts fbeb467c04 EAGLESIX-3157: fix npm test to use mocha.opts před 11 roky
test 2668741ef8 EAGLESIX-4483: fix async w/ large sets, break sync :-( -- to be fixed later před 10 roky
.gitignore 3a3cc10b7c add .c9/ to git ignores list před 10 roky
.jscheckstyleignore 33a99df088 Fixes #1612, #963: Renamed `alter` to `munge`. Removed unused `microdb`. Added test for `ExpressionDayOfMonth`. Fixed bug calling base `DayOfMonthExpression#addOperand()`. Fixed off-by-one bug in `DayOfMonthExpression#evaluate()`. před 12 roky
.jshintrc 8f1b7def78 EAGLESIX-3157: jshint change to abuse expressions před 11 roky
NOTES.md 004b6f5755 clean up docs a bit před 11 roky
README.md 004b6f5755 clean up docs a bit před 11 roky
TODO.md 004b6f5755 clean up docs a bit před 11 roky
mungedb-aggregate.js e382544f4e Refs #1879: Fixed jshint and pkg rename issues před 12 roky
package.json c0961b63a2 EAGLESIX-4483: make pinning on bson less strict to reduce likelihood of duplication of the bson pkg před 10 roky

README.md

mungedb-aggregate

A JavaScript data aggregation pipeline based on the MongoDB database's aggregation framework.

Based on the MongoDB C++ code (v2.4.0).

Updating to v2.6 soon.

Why

MongoDB Aggregation and JavaScript are both awesome. We put them together.

Now, with the ease of JavaScript and the power of the MongoDB aggregation pipeline, we can provide a single API for data munging, regardless of where execution occurs. You can extend the base functionality to suit your needs.

Example

var aggregate = require("mungedb-aggregate");

var inputs = [
  {v: 1},
  {v: 2},
  {v: 3},
  {v: 4},
  {v: 5}
];

var pipeline = [
  {$match:{
    v: {$gte: 3}
  }},
  {$project:{
    v2: {$multiply: ["$v", "$v"]}
  }}
];

aggregate(pipeline, inputs);  // => [{v2:9}, {v2:16}, {v2:25}]

API

Public parts:

  • aggregate(pipeline, [inputs], [callback]) - The data aggregator
    • pipeline - The aggregation pipeline to apply to inputs
    • [inputs] - The input Objects to aggregate or return curried if omitted
    • [callback] - The callback if needed (for extensions using async calls)
  • version - The MongoDB version that this code represents
  • gitVersion - The MongoDB git revision that this code represents

Inner workings:

  • Cursor - Used to go thru data (by PipelineD and CursorDocumentSource)
  • pipeline
    • Pipeline - The pipeline handler
    • PipelineD - The pipeline data reader helper
    • FieldPath - Represents a path to a field within a document
    • Document - Document helpers used throughout the code
    • Value - Value helpers used throughout the code
    • accumulators - The Accumulator classes (used in $group)
    • documentSources - The DocumentSource classes (upper pipeline objects)
    • expressions - The Expression classes (used in $project)