2016-03-29 8 views
0

Ich habe kämpfen, um Merge von gorethink (RethinkDB des Fahrers in Go) gewöhnungsgo - Merge in 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) 

Ich habe 3 Sammlungen: article, quote und user

Mit Die obige Funktion, die ich beabsichtige:

  • Abfrage aller Angebotsdokumente von idUser
  • Mit jedem Zitat, das ich bekommen, möchte ich seine jeweilige idArticle Feld verwenden, in Artikel Sammlung
  • Nachdem sie das entsprechende Dokument mit idArticle abzufragen, ich benutze es Schlüsselwörter, die Dokumentfelder
  • Schließlich abzufragen, fusionieren ich Keywords Array zu jedem Dokument Zitat

in JavaScript-API für RethinkDB, ich so umgesetzt:

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

Aber ich habe es nicht geschafft das gleiche in gorethink zu tun. Wie kann ich den Wert Termrow.Field("idArticle") erhalten und für spätere Abfragen und Merge verwenden?

Antwort

0

Vielen Dank. Ich es geschafft, die in Panik geratenen Fehler ist

wahre Antwort zu lösen:

result,err:=r.Table("quote").Filter(r.Row.Field("idUser").Eq(idUser)). 
     OrderBy(r.Desc("created_at")). 
     Merge(func(quote r.Term) interface{}{ 
      fmt.Println(quote.Field("idArticle")) 
      article:=r.Table("article").Get(quote.Field("idArticle")) 
      return map[string]interface{}{ 
       "tags":map[string]interface{}{ 
        "keywords":article.Field("keywords"), 
       }, 
      } 
     }). 
     Run(config.Connection()) 

ich wegen der Aussage gestern Abend in Panik geraten wurde der zurückgegebenen Adresse für Cursor Ergebnis: Es war: var all map[string]interface{} Während es sein sollte: var all []interface{} Dann Panik in err=result.All(&all)

1

meine Antwort Kopiert von https://github.com/dancannon/gorethink/issues/291

Sie sollten in der Lage Ihre JS Abfrage zu konvertieren, ohne Run Aufruf unter Verwendung der Unterabfrage zu gehen. Zum Beispiel:

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"), 
     }, 
    } 
})