RethinkDB - JavaScript加入多个项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RethinkDB - JavaScript加入多个项目相关的知识,希望对你有一定的参考价值。

我有以下数据结构:

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

答案

这样做的方法是:

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

嗯,你明白了。

以上是关于RethinkDB - JavaScript加入多个项目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 在 ReThinkDB 中的 ReQL 中的数组上应用过滤器

Thinky ORM + RethinkDB - 多对多关系

使用 RethinkDB 调用 cursor.changes() 时如何获取初始文档

stf-多设备管理平台搭建

不向 rethinkdb 插入数据

如何在 Ubuntu 上卸载 RethinkDB?