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

Spencer Rathbun 66c08fd85d Fixes #973. Test cases and bug fixes for SecondExpression. The test case for leap seconds is commented out, because v8 does not support it. We can come back and fix it later. před 12 roky
lib 66c08fd85d Fixes #973. Test cases and bug fixes for SecondExpression. The test case for leap seconds is commented out, because v8 does not support it. We can come back and fix it later. před 12 roky
npm_scripts 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
test 66c08fd85d Fixes #973. Test cases and bug fixes for SecondExpression. The test case for leap seconds is commented out, because v8 does not support it. We can come back and fix it later. před 12 roky
.gitignore 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
.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 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
README.md 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
index.js 0c92dec382 fixed some broken references to Alter. refs #965 před 12 roky
munge.js 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
package.json 3455531d44 Refs #965. Fixed dependency in package.json for munge před 12 roky

README.md

munge

A JavaScript data munging pipeline based on the MongoDB aggregation framework.

exports

TODO: document the major exports and a little about each here

Deviations

Here is a list of the major items where I have deviated from the MongoDB code and why:

  • Pipeline Expressions
    • Value class
      • DESIGN: Value now provides static helpers rather than instance helpers since that seems to make more sense here
      • NAMING: Value#get{TYPE} methods have been renamed to Value.verify{TYPE} since that seemed to make more sense given what they're really doing for us as statics
      • DESIGN: Value.coerceToDate static returns a JavaScript Date object rather than milliseconds since that seems to make more sense where possible
    • NAMING: The Expression{FOO} classes have all been renamed to {FOO}Expression to satisfy my naming OCD.
    • DESIGN: The {FOO}Expression classes do not provide create statics since calling new is easy enough
      • DESIGN: To further this, the CompareExpression class doesn't provide any of it's additional create{FOO} helpers so instead I'm binding the appropriate args to the ctor
    • TESTING: Most of the expression tests have been written without the expression test base classes

TODO

Here is a list of global items that I know about that may need to be done in the future:

  • Go through the TODOs....
  • getOpName should be static!
  • Need a method by which consumers can provide their own extensions
  • Move expression name to the ctor? or at least a const prototype property or something
  • NAMING: need to go back through and make sure that places referencing in the C++ code are represented here by referencing a var called "doc" or similar
  • Currently using JS types but may need to support BSON types to do everything properly; affects handling of ObjectId, ISODate, and Timestamp
  • Go through test cases and try to turn assert.equal() calls into assert.strictEqual() calls
  • Replace exports = module.exports = with module.exports = only
  • Go through uses of throw and make them actually use UserException vs SystemException (or whatever they're called)