Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-23816

Add $sortByCount aggregation stage

    • Fully Compatible
    • Query 16 (06/24/16)

      Syntax

      { $sortByCount: <arbitrary non-object expression, see 'Behavior' for why> }
      

      Examples

      > db.example.insert([
        {_id: 0, x: 1},
        {_id: 1, x: 2},
        {_id: 2, x: 1},
        {_id: 3, x: 0}
      ]);
      > db.example.aggregate([{$sortByCount: "$x"}])
      {_id: 1, count: 2}
      {_id: 0, count: 1}
      {_id: 2, count: 1}
      
      // Example #2
      > db.example.drop();
      > db.example.insert([
        {_id: 0, x: 1.4},
        {_id: 1, x: 2.3},
        {_id: 2, x: 1.1},
        {_id: 3, x: 0.5}
      ]);
      // Note this is an expression, so does not count as an "object" for the sake of erroring.
      > db.example.aggregate([{$sortByCount: {$floor: "$x"}}])
      {_id: 1, count: 2}
      {_id: 0, count: 1}
      {_id: 2, count: 1}
      
      // Example #3
      > db.example.aggregate([{$sortByCount: {field1: "$x", field2: "$y"}}])
      Error!
      

      Behavior

      • This stage is syntactic sugar for the following:
        {
          $group: {
            _id: <expression>,
            count: {$sum: 1}
          }
        },
        {$sort: {count: -1}}
        
      • We restrict the expression to not be an object so that we might be able to add further arguments to $sortByCount in the future.

            Assignee:
            sally.mcnichols Sally McNichols
            Reporter:
            charlie.swanson@mongodb.com Charlie Swanson
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: