我一直在努力适应Mergegorethink(Go中RethinkDB的驱动程序)

result,err:=r.Table("quote").GetAllByIndex("idUser",idUser).
        OrderBy(r.Desc("created_at")).Merge(func(row r.Term) interface{}{
            res,_:=r.Table("article").Get(row.Field("idArticle")).Run(session)
            // TODO
            return map[string]interface{}{
                // TODO
            }
        }).Run(session)

我有3个集合:articlequoteuser
通过以上功能,我打算:
  • 通过idUser
  • 查询所有报价文件
  • 在获得每个报价时,我想使用其各自的idArticle字段在文章集合
  • 中进行查询
  • 使用idArticle获得适当的文档后,我用它来查询该文档的关键字字段
  • 最后,我将关键字数组合并到每个报价文档

  • 在RethinkDB的JavaScript API中,我是这样实现的:
    findAllByUser = function(idU){
            return r.table(table)
            .filter({idUser: idU})
            .orderBy(r.desc('created_at'))
            .merge(function(quote){
                var article = r.table('article').get(quote('idArticle'));
                return {
                    tags: {keywords: article('keywords')}
                }
            })
            .run(connection)
            .then(function(result){
                return result.toArray();
            });
        }
    

    但是我仍然没有在gorethink中做同样的事情。如何获得Term的值row.Field("idArticle")并将其用于以后的查询和Merge

    最佳答案

    https://github.com/dancannon/gorethink/issues/291复制了我的答案

    您应该能够通过使用子查询将JS查询转换为Go,而无需调用Run。例如:

    r.Table(table)
    .Filter(map[string]interface{}{"idUser": idU})
    .OrderBy(r.Desc("created_at"))
    .Merge(func(quote r.Term){
        article := r.Table("article").Get(quote.Field("idArticle"))
        return map[string]interface{}{
            "tags": map[string]interface{}{
                "keywords": article("keywords"),
            },
        }
    })
    

    关于javascript - go-在Go RethinkDB中合并,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36287265/

    10-13 02:21