SetUnionExpression.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use strict";
  2. /**
  3. * A $setunion pipeline expression.
  4. * @see evaluateInternal
  5. * @class SetUnionExpression
  6. * @namespace mungedb-aggregate.pipeline.expressions
  7. * @module mungedb-aggregate
  8. * @constructor
  9. **/
  10. var SetUnionExpression = module.exports = function SetUnionExpression() {
  11. base.call(this);
  12. }, klass = SetUnionExpression, base = require("./NaryBaseExpressionT")(SetUnionExpression), proto = klass.prototype = Object.create(base.prototype, {constructor:{value:klass}});
  13. // DEPENDENCIES
  14. var Value = require("../Value"),
  15. Expression = require("./Expression");
  16. // PROTOTYPE MEMBERS
  17. proto.getOpName = function getOpName() {
  18. return "$setUnion";
  19. };
  20. /**
  21. * Takes 2 objects. Unions the objects
  22. * @method evaluateInternal
  23. **/
  24. proto.evaluateInternal = function evaluateInternal(vars) {
  25. var object1 = this.operands[0].evaluateInternal(vars),
  26. object2 = this.operands[1].evaluateInternal(vars);
  27. if (object1 instanceof Array) throw new Error(this.getOpName() + ": object 1 must be an object");
  28. if (object2 instanceof Array) throw new Error(this.getOpName() + ": object 2 must be an object");
  29. var object3 = {};
  30. for (var attrname1 in object1) {
  31. object3[attrname1] = object1[attrname1];
  32. }
  33. for (var attrname2 in object2) {
  34. object3[attrname2] = object2[attrname2];
  35. }
  36. return object3;
  37. };
  38. /** Register Expression */
  39. Expression.registerExpression("$setUnion", base.parse);