rnldpbln
rnldpbln

Reputation: 674

mongodb aggregation query per given condition

Let's say I have these collections

 {
     _id: 1,
     status: 'pending'
 },
 { ... to id 10 for example (status is pending)},
 {
    _id: 12,
    status: 'released'
 },
 { ... to id 22 for example (status is released)},

How do i query only 5 documents per status ('pending' and 'released') while using the aggregation pipeline?

Upvotes: 0

Views: 52

Answers (1)

sushant mehta
sushant mehta

Reputation: 1274

Suppose input is:

[
  {
    "_id": 1,
    "status": "pending"
  },
  {
    "_id": 2,
    "status": "pending"
  },
  {
    "_id": 3,
    "status": "pending"
  },
  {
    "_id": 4,
    "status": "pending"
  },
  {
    "_id": 5,
    "status": "pending"
  },
  {
    _id: 6,
    status: "pending"
  },
  {
    _id: 7,
    status: "pending"
  },
  {
    _id: 8,
    status: "pending"
  },
  {
    _id: 9,
    status: "released"
  },
  {
    _id: 10,
    status: "released"
  },
  {
    _id: 11,
    status: "released"
  },
  {
    _id: 12,
    status: "released"
  },
  {
    _id: 13,
    status: "released"
  },
  {
    _id: 14,
    status: "released"
  },
  {
    _id: 15,
    status: "released"
  },
  {
    _id: 16,
    status: "released"
  },

]

You can use aggregate pipeline $facet to get 2 arrays of data

collectionname.aggregate([
  {
    $facet: {
      pending: [
        {
          $match: {
            status: "pending"
          }
        },
        {
          $skip: 0
        },
        {
          $limit: 5
        }
      ],
      released: [
        {
          $match: {
            status: "released"
          }
        },
        {
          $skip: 0
        },
        {
          $limit: 5
        }
      ]
    }
  }
])

giving output:

[
  {
    "pending": [
      {
        "_id": 1,
        "status": "pending"
      },
      {
        "_id": 2,
        "status": "pending"
      },
      {
        "_id": 3,
        "status": "pending"
      },
      {
        "_id": 4,
        "status": "pending"
      },
      {
        "_id": 5,
        "status": "pending"
      }
    ],
    "released": [
      {
        "_id": 9,
        "status": "released"
      },
      {
        "_id": 10,
        "status": "released"
      },
      {
        "_id": 11,
        "status": "released"
      },
      {
        "_id": 12,
        "status": "released"
      },
      {
        "_id": 13,
        "status": "released"
      }
    ]
  }
]

Upvotes: 1

Related Questions