Uploaded image for project: 'C# Driver'
  1. C# Driver
  2. CSHARP-1634

aggregation framework should have an $in expression

    • Type: Icon: New Feature New Feature
    • Resolution: Won't Fix
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: Linq
    • None

      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.

            Assignee:
            craig.wilson@mongodb.com Craig Wilson
            Reporter:
            rathi.gnanasekaran Rathi Gnanasekaran
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: