summaryrefslogtreecommitdiff
path: root/db/matcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'db/matcher.cpp')
-rw-r--r--db/matcher.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/db/matcher.cpp b/db/matcher.cpp
index bc6792c7e67..fac352a1d60 100644
--- a/db/matcher.cpp
+++ b/db/matcher.cpp
@@ -246,6 +246,11 @@ namespace mongo {
basics.push_back( BasicMatcher( e , BSONObj::opIN , fe.embeddedObject() ) );
ok = true;
}
+ else if ( fn[1] == 'm' && fn[2] == 'o' && fn[3] == 'd' && fn[4] == 0 && fe.type() == Array ) {
+ // $mod
+ basics.push_back( BasicMatcher( e , BSONObj::opMOD ) );
+ ok = true;
+ }
else if ( fn[1] == 'n' && fn[2] == 'i' && fn[3] == 'n' && fn[4] == 0 && fe.type() == Array ) {
// $nin
basics.push_back( BasicMatcher( e , BSONObj::NIN , fe.embeddedObject() ) );
@@ -315,7 +320,14 @@ namespace mongo {
}
return count == r.number();
}
-
+
+ if ( op == BSONObj::opMOD ){
+ if ( ! l.isNumber() )
+ return false;
+
+ return l.numberLong() % bm.mod == bm.modm;
+ }
+
/* check LT, GTE, ... */
if ( !( l.isNumber() && r.isNumber() ) && ( l.type() != r.type() ) )
return false;