Jesse James Richard
Jesse James Richard

Reputation: 493

MongoDb Find Collections based on _id and a key in an array

So if I had something like this:

{
_id:'123',
parts: ['One','Two','Three']
}

So if I wanted parts[0], is it possible to do the find for just that?

So something like:

db.stories.find({_id:'123', part:{$eq:0}})

I know the above is wrong, but I'm wondering if it's more efficient to do the find properly if possibly (criteria related to object/array key), or simply do the broad find and go from there (i.e. use the criteria without object/document.

Upvotes: 0

Views: 59

Answers (2)

Naresh Kumar
Naresh Kumar

Reputation: 276

If you want to get 0 index element from the parts array you can write in this way

  db.sample.find({ _id : "123" } , { parts : { $slice : [0 , 1] } } )

Upvotes: 1

sidgate
sidgate

Reputation: 15244

You can use $project and $arrayElemAt to get the first element in the array

db.stories.aggregate([
  {
    $match: {_id: '123'}
  },{
    $project: {part: {$arrayElemAt: ['$parts',0]}}
  }
])

Upvotes: 1

Related Questions