tRi11
tRi11

Reputation: 149

How to return a filtered nested array in RethinkDB?

Is it possible to filter the elements of a nested array in RethinkDB, similar to $elemMatch in MongoDB?

For example, if we have a simple table collection like:

[
    {
        "name": "test1" ,
        "nested": [
            {
                "name": "nested1" ,
                "user": "paul"
            } ,
            {
                "name": "nested2" ,
                "user": "paul"
            } ,
            {
                "name": "nested3" ,
                "user": "dave"
            }
        ]
    } ,
    {
        "name": "test2" ,
        "nested": [
            {
                "name": "nested4" ,
                "user": "dave"
            } ,
            {
                "name": "nested5" ,
                "user": "paul"
            } ,
            {
                "name": "nested6" ,
                "user": "steve"
            }
        ]
    }
]

How would I write a filter to return documents, with filtered arrays that contain the user "paul"?

So my result would be:

[
    {
        "name": "test1" ,
        "nested": [
            {
                "name": "nested1" ,
                "user": "paul"
            } ,
            {
                "name": "nested2" ,
                "user": "paul"
            }
        ]
    } ,
    {
        "name": "test2" ,
        "nested": [
            {
                "name": "nested5" ,
                "user": "paul"
            }
        ]
    }
]

I can get the documents with:

r.db('test').table('example').filter(r.row('nested')('user').contains('paul'))

How do I then filter the nested arrays?

Thanks,

Paul

Upvotes: 2

Views: 253

Answers (1)

Kludge
Kludge

Reputation: 2835

  table.map(function(row) {
    return row.merge({
      nested: row('nested').filter({user: 'paul'})
    })
  })

Upvotes: 2

Related Questions