AnyElementTrueExpression.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. "use strict";
  2. /**
  3. * Create an expression that returns true exists in any element.
  4. * @class AnyElementTrueExpression
  5. * @namespace mungedb-aggregate.pipeline.expressions
  6. * @module mungedb-aggregate
  7. * @constructor
  8. **/
  9. var AnyElementTrueExpression = module.exports = function AnyElementTrueExpression(){
  10. this.fixedArity(1);
  11. if (arguments.length !== 0) throw new Error("zero args expected");
  12. base.call(this);
  13. }, klass = AnyElementTrueExpression, NaryExpression = require("./NaryExpression"), base = NaryExpression, proto = klass.prototype = Object.create(base.prototype, {constructor:{value:klass}});
  14. // DEPENDENCIES
  15. var Value = require("../Value"),
  16. Expression = require("./Expression");
  17. // PROTOTYPE MEMBERS
  18. proto.getOpName = function getOpName(){
  19. return "$anyElementTrue";
  20. };
  21. /**
  22. * Takes an array of one or more numbers and returns true if any.
  23. * @method @evaluateInternal
  24. **/
  25. proto.evaluateInternal = function evaluateInternal(doc) {
  26. if (!doc instanceof Array) throw new Error("$anyElementTrue requires an array");
  27. var total = 0;
  28. for (var i = 0, n = doc.length; i < n; ++i) {
  29. var value = doc[i].evaluateInternal([i]);
  30. if ( value.coerceToBool() )
  31. return true;
  32. }
  33. return false;
  34. };
  35. /** Register Expression */
  36. Expression.registerExpression("$anyElementTrue",AnyElementTrueExpression.parse);