diff options
author | Benjamin Murphy <benjamin_murphy@me.com> | 2016-04-11 16:56:59 -0400 |
---|---|---|
committer | Benjamin Murphy <benjamin_murphy@me.com> | 2016-04-21 11:38:43 -0400 |
commit | 223c2a1aa5fd11fd3e7115ca9acb6d1217f80f92 (patch) | |
tree | 7c34cfa98f2b2324862405d9c14e6fdc57aef2de /src/mongo/db/pipeline/expression.cpp | |
parent | 75f24a26015566ce5458887de1431d2458ff7fd3 (diff) | |
download | mongo-223c2a1aa5fd11fd3e7115ca9acb6d1217f80f92.tar.gz |
SERVER-6146 Aggregation now supports the in expression.
Diffstat (limited to 'src/mongo/db/pipeline/expression.cpp')
-rw-r--r-- | src/mongo/db/pipeline/expression.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp index 9eb2497cd27..465c98aa450 100644 --- a/src/mongo/db/pipeline/expression.cpp +++ b/src/mongo/db/pipeline/expression.cpp @@ -2095,6 +2095,29 @@ const char* ExpressionIfNull::getOpName() const { return "$ifNull"; } +/* ----------------------- ExpressionIn ---------------------------- */ + +Value ExpressionIn::evaluateInternal(Variables* vars) const { + Value argument(vpOperand[0]->evaluateInternal(vars)); + Value arrayOfValues(vpOperand[1]->evaluateInternal(vars)); + + uassert(40081, + str::stream() << "$in requires an array as a second argument, found: " + << typeName(arrayOfValues.getType()), + arrayOfValues.isArray()); + for (auto&& value : arrayOfValues.getArray()) { + if (argument == value) { + return Value(true); + } + } + return Value(false); +} + +REGISTER_EXPRESSION(in, ExpressionIn::parse); +const char* ExpressionIn::getOpName() const { + return "$in"; +} + /* ----------------------- ExpressionLn ---------------------------- */ Value ExpressionLn::evaluateNumericArg(const Value& numericArg) const { |