-
Type: New Feature
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Aggregation Framework
-
Fully Compatible
-
Query 13 (04/22/16)
Syntax
{$in: [<arbitrary expression>, <arbitrary array expression>]}
Examples
db.coll.insert([ {_id: 0, x: "Bob"} ]); > db.coll.aggregate([{ $project: { hasBobOrRob: {$in: ["$x", ["Bob", "Rob"]]} } }]); {_id: 0, hasBobOrRob: true} // Example 2 > db.coll.insert([ {_id: 0, x: "aaa"}, {_id: 1, x: /^a/} ]); > db.coll.aggregate([{ $project: { matches: {$in: ["$x", [/^a/]]} } }]) {_id: 0, matches: false} {_id: 1, matches: true} // Note the intentional inconsistency. > db.foo.find({x: {$in: [/^a/]}}) {_id: 0, x: "aaa"} {_id: 1, x: /^a/}
Notes
- Should result in the same values as a $in in a MatchExpression (except with regexes).
- Should not do regex matching if the values in the array are regexes.
- This is different from what the query system does, a query predicate of {x: {$in: [/^a/]} will find strings which start with "a". This is arguably a bug in query, and will not be duplicated here.
Errors
- If the second expression is not an array.
- If there are not two arguments passed to the expression.
Old Description
Currently expressions like $eq, $ne, $gt, etc are supported but there is no $in available to test set membership.
- is depended on by
-
CSHARP-1634 aggregation framework should have an $in expression
- Closed
- is duplicated by
-
SERVER-7162 Add $in operator for $cond, etc., in aggregation framework.
- Closed
- related to
-
DRIVERS-297 Aggregation Framework Support for 3.4
- Closed
-
SERVER-8582 Extend document expression language in aggregation to support advanced document filtering.
- Closed