RethinkDB - JavaScript加入多个项目

问题描述 投票:0回答:1

我有以下数据结构:

  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方式?

javascript nosql rethinkdb
1个回答
0
投票

这样做的方法是:

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')
    });

嗯,你明白了。

© www.soinside.com 2019 - 2024. All rights reserved.