RethinkDB - JavaScript Присоединяйтесь к нескольким элементам - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующая структура данных:

  persons
[
    {
        id:1,
        firstname:'My name',
        talks[
            {
                talk_id:1,
                since:2018-01-01
            },
            {
                talk_id:2,
                since:2018-01-01
            },
            {
                talk_id:3,
                since:2018-01-01
            }
        ]
    },
    {
        id:2,
        firstname:'Other name',
        talks[
            {
                talk_id:1,
                since:2018-01-01
            }           
        ]
    }
]


talks
[
    {
        id:1
        name:'Talk about something'
    },
    {
        id:2
        name:'Talk about something else'
    },
    {
        id:3
        name:'Talk about nothing'
    }
]

Я хочу объединить объект лиц со всеми разговорами внутри, которые назначены этому человеку. Я попытался решить это самостоятельно с примерами, приведенными в документации, но я не могу понять, как архивировать это.

Может быть, моя структура данных не в том порядке, как noSQL?

1 Ответ

0 голосов
/ 05 сентября 2018

Способ сделать это будет:

r.db('tedtalks').table('persons')
.getAll(/* select people here I suppose */)
.merge({
  talks: r.row('talks').map(function (talk) {
    return talk.merge({
      talk: r.db('tedtalks').table('talks').get(talk('talk_id'))
    });
  })
});

Ваш результат будет выглядеть так:

[
    {
        id:1,
        firstname:'My name',
        talks[
            {
                talk_id:1,
                since:2018-01-01,
                talk: {
                    id: 1,
                    name: 'Talk about something'
                }
            },
            {
                talk_id:2,
                since:2018-01-01,
                talk: {
                    id: 2,
                    name: 'Talk about something else'
                }
            },
            {
                talk_id:3,
                since:2018-01-01,
                talk: {
                    id: 3,
                    name: 'Talk about nothing'
                }
            }
        ]
    },
    {
        id:2,
        firstname:'Other name',
        talks[
            {
                talk_id:1,
                since:2018-01-01,
                talk: {
                    id: 1,
                    name: 'Talk about something'
                }
            }           
        ]
    }
]

В вызове .map вы можете захотеть вернуть объект напрямую, чтобы избавиться от talk_id:

    return {
      talk: r.db('tedtalks').table('talks').get(talk('talk_id')),
      since: talk('since')
    };

Или даже все на одном уровне (если ключи не перекрываются):

    return r.db('tedtalks').table('talks').get(talk('talk_id')).merge({
      since: talk('since')
    });

Ну, вы поняли.

...