A JavaScript data aggregation pipeline based on the MongoDB database's aggregation framework. https://riveragroup.github.io/mungedb-aggregate/
|
|
пре 12 година | |
|---|---|---|
| lib | пре 12 година | |
| npm_scripts | пре 12 година | |
| test | пре 12 година | |
| .gitignore | пре 12 година | |
| .jscheckstyleignore | пре 12 година | |
| .jshintrc | пре 12 година | |
| README.md | пре 12 година | |
| index.js | пре 12 година | |
| munge.js | пре 12 година | |
| package.json | пре 12 година |
A JavaScript data munging pipeline based on the MongoDB aggregation framework.
In general, this code is a port from the MongoDB C++ code (v2.4.0) to JavaScript.
TODO: document the major exports and a little about each here
Here is a list of the major items where we have deviated from the MongoDB code and a little bit about why:
Document class
Document now provides static helpers rather than instance helpers to avoid unecessary boxing/unboxing since that seems to make more sense here (we treat any Object like a Document)Expression class
ObjectCtx class no longer uses contants and a bit flags but instead uses similarly named boolean; e.g., isDocumentOk rather than DOCUMENT_OKValue class
Value now provides static helpers rather than instance helpers to avoid unecessary boxing/unboxing since that seems to make more sense here (we treat any Object like a `Value)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 staticsValue.coerceToDate static returns a JavaScript Date object rather than milliseconds since that seems to make more sense where possibleExpression{FOO} classes have all been renamed to {FOO}Expression to satisfy my naming OCD.{FOO}Expression classes do not provide create statics since calling new is easy enough
CompareExpression class doesn't provide any of it's additional create{FOO} helpers so instead I'm binding the appropriate args to the ctorBSON-specific code has become equivalent JSON-specific code since that's what we're working with (no need for needless conversions)addToBson... and other BSONObjBuilder-related methods that take in an instance to be modified but it's owned by the caller; in munge we build a new Object and return it because it's simpler and that's how they're generally used anyhowHere is a list of global items that I know about that may need to be done in the future:
getOpName should be static!BSON types to do everything properly; affects handling of ObjectId, ISODate, and Timestampassert.equal() calls into assert.strictEqual() callsexports = module.exports = with module.exports = onlythrow and make them actually use UserException vs SystemException (or whatever they're called)/** documentation **/ to ensure that they are YUIDoc-fiendly and exist on multiple linesseal, freeze, etc.) where appropriatevirtuals (i.e., /virtual .* = 0;$/) are implemented as a proto with a throw new Error("NOT IMPLEMENTED BY INHERITOR") or similar