2

I'm working on retrieving selective data from an array based on certain conditions. But I don't to unwind it. Is there any way in mongoDB to project a single element in array of objects which matches a condition.

  • [You can filter the array](https://www.mongodb.com/docs/manual/reference/operator/aggregation/filter/) – mousetail Jul 21 '22 at 07:40
  • Can you add more details to your question, which specific element from array you want to select? – turivishal Jul 21 '22 at 07:41
  • Your question s already answered at the following post. Also, note that there are different ways of achieving the result: [Retrieve only the queried element in an object array in MongoDB collection](https://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array-in-mongodb-collection). – prasad_ Jul 21 '22 at 11:08

1 Answers1

0

The positional operator $ would be perfect here, from the docs:

The positional $ operator limits the contents of an to return the first element that matches the query condition on the array.

For input in the structure:

[
  {
    "arr": [
      {
        value: "other value"
      },
      {
        value: "match this"
      },
      {
        value: "dont match"
      }
    ]
  }
]

You just use this query:

db.collection.find({
  "arr.value": "match this"
},
{
  "arr.$": 1
})

Output:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "arr": [
      {
        "value": "match this"
      }
    ]
  }
]

Mongo Playground

Tom Slabbaert
  • 21,288
  • 10
  • 30
  • 43