gpt4 book ai didi

mysql - gorethink 内连接

转载 作者:行者123 更新时间:2023-11-29 21:02:25 26 4
gpt4 key购买 nike

我并没有放弃理解 RethinkDB 中的联接,不幸的是,关于它的德语文档很少。

所以我有一个表“类别”,其中有两个文档:

{"id":1, "title":"Category 1"}
{"id":2, "title":"Category 2"}

比我有第二个表“论坛”,我有三个文档:

{"id":1, "title":"Forum 1", "categoryId":1}
{"id":2, "title":"Forum 2", "categoryId":1}
{"id":3, "title":"Forum 3", "categoryId":2}

我想要的结果是:

[{"id":1, "title":"Category 1", "forums":[{"id":1, "title":"Forum 1"},{"id":2, "title":"Forum 2"}]}, {"id":2, "title":"Category 2", "forums":[{"id":3, "title":"Forum 3"}]}]

我不知道如何将这个 JavaScript 示例 ( https://www.rethinkdb.com/api/javascript/#inner_join ) 转换为 Go,因为函数中的参数 (marvelRow, dcRow) 需要在 Go 中声明,但我不知道是哪个。

最佳答案

我们先用 JavaScript 编写,然后用 Go 编写,这样下次你就知道该怎么做了。

您可以通过连接或映射轻松完成您想要的操作。但是, join 将返回一对匹配文档,而不是按照您想要的嵌套方式。然而,我们可以这样映射它:

r.table('categories')
.merge(function(cat) {
return {
forums: r.table('forums').filter({categoryId: cat('id')}).without('categoryId').coerceTo('array')
}
})

现在让我们转向 Go 语言。

package main

import (
r "github.com/dancannon/gorethink"
"log"
)

func main() {

s, _ := r.Connect(r.ConnectOpts{
Address: "127.0.0.1:28015",
Database: "test",
MaxIdle: 10,
MaxOpen: 10,
})


res, err := r.DB("test").Table("categories").Merge(func(doc r.Term) interface{} {
return map[string]interface{}{
"forums": r.DB("test").Table("forums").Filter(map[string]interface{}{
"categoryId": doc.Field("id"),
}).CoerceTo("array"),
}
}).Run(s)

log.Println(err)

var row interface{}
for res.Next(&row) {
log.Println(row)
}
}

一切几乎相同,除了在 Go 语言中,你必须指定类型。因此,您将 JS 匿名函数转换为 Go lang 匿名函数,但现在大多数情况下,所有内容都将具有 r.Term 类型。您还必须指定返回类型,因为我们在本例中使用interface。 JavaScript 对象现在变成 map[string]interface{}

一般情况下,进入这个页面https://github.com/dancannon/gorethink/wiki/Go-ReQL-command-reference就可以了并开始一步步转换JS。除了类型之外,它几乎是一对一的映射。

关于mysql - gorethink 内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com