diff options
author | matt dannenberg <matt.dannenberg@10gen.com> | 2013-09-09 13:20:20 -0400 |
---|---|---|
committer | matt dannenberg <matt.dannenberg@10gen.com> | 2013-09-09 14:04:00 -0400 |
commit | abb240549a0174f52d1ee18a8866e0ad65a10881 (patch) | |
tree | d82830e74a50237fa9993fdb845538b6952fa9e0 /src/mongo/db/pipeline/expression.cpp | |
parent | f1e09016d390badbfd9d1c75ed7683c12fb45c10 (diff) | |
download | mongo-abb240549a0174f52d1ee18a8866e0ad65a10881.tar.gz |
SERVER-4899 $size for aggregation
Diffstat (limited to 'src/mongo/db/pipeline/expression.cpp')
-rw-r--r-- | src/mongo/db/pipeline/expression.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp index 5a3d01397b9..edd418d8102 100644 --- a/src/mongo/db/pipeline/expression.cpp +++ b/src/mongo/db/pipeline/expression.cpp @@ -2350,6 +2350,22 @@ namespace { return "$setUnion"; } + /* ----------------------- ExpressionSize ---------------------------- */ + + Value ExpressionSize::evaluateInternal(const Variables& vars) const { + Value array = vpOperand[0]->evaluateInternal(vars); + + uassert(17124, str::stream() << "The argument to $size must be an Array, but was of type: " + << typeName(array.getType()), + array.getType() == Array); + return Value::createIntOrLong(array.getArray().size()); + } + + REGISTER_EXPRESSION("$size", ExpressionSize::parse); + const char *ExpressionSize::getOpName() const { + return "$size"; + } + /* ----------------------- ExpressionStrcasecmp ---------------------------- */ Value ExpressionStrcasecmp::evaluateInternal(const Variables& vars) const { |