Querying array of nested objects
Asked Answered
C

1

8

Say I have this JSON (sample - a real-life example can be found at apple itunes rss feed) stored in a RethinkDB table called 'test':

{
    "feed": {
        "entry": [
            {
                "title": {
                    "label": "Some super duper app"
                },
                "summary": {
                    "label": "Bla bla bla..."
                }
            },
            {
                "title": {
                    "label": "Another awsome app"
                },
                "summary": {
                    "label": "Lorem ipsum blabla..."
                }
            }
        ]
    }
}

How would I write a ReQL query in JavaScript in order to fetch the summary of all entries (entry) which have title containing the string "xyz"? I expect the query result to return an array of matching entry objects, not an array of matching feed.

Cammiecammy answered 24/2, 2014 at 0:12 Comment(0)
F
11

If I properly understood what you want to do, this query should be what you are looking for:

r.table("feeds").concatMap(function(doc) {
    return doc("feed")("entry")
}).filter(function(entry) {
    return entry("title")("label").match("xyz")
})
Fray answered 24/2, 2014 at 0:41 Comment(4)
@neumino, if there was "id" at the top level like: {id:1, feed: ....} How to get this id after matching this text? for example: get all the ids of docs whose feed->entry->title->label match "xyz"? is there anyway to do that?Maori
You can chain with ("id") or map(function(doc) { return doc("id") })Fray
@Fray could you elaborate a bit on that? where in the chain should I apply that map call? I've tried replicating it on a similar case but the stream resulting after concatMap...filter won't have the top level property (id in the example)Virility
@Fray I found this gist of yours #21977086 that solves my issueVirility

© 2022 - 2024 — McMap. All rights reserved.