2016-04-13 11 views
0

passend Dies ist mein Tisch in rethinkDBRethinkDB: eine Zeichenfolge aus einer Liste von Strings

[{"username": "row1", "some_key": ["str1", "str2"]}, {"username": "row2", "some_key": ["str3", "blah"]}, {"username": "row3", "some_key": ["blah", "blahblah"]}]

Die field (Spalte) name wiederholt werden kann. Ich habe eine list['row1', 'row2'].

Ich möchte Abfrage auszuführen und alle documents (Zeilen), wo name in der list ist

Bisher habe ich dieses:

r.db(self.PROJECT_DB).table(self.PROJECT_TABLE_PICWIZ).filter(r.row['username'] == name for name in following).limit(5).run(self.db_connection)

following die list ist hier.

Aber das gibt alle documents (Zeilen)

+0

Hey Chronix, ich sehe kein Feld 'following' oder' benutzername' in Ihren Dokumenten? Gibt es solche, aber Sie listen sie nicht auf? – dalanmiller

+0

'following' ist die generierte Liste, die nicht auf die Tabelle bezogen ist – Chronix01

Antwort

0

diese Python annimmt. Ich denke, was ich bin Verständnis ist, dass Sie so etwas wie dies wollen, following erwägt nur eine Liste:

picwiz = r.db(self.PROJECT_DB).table(self.PROJECT_TABLE_PICWIZ) 
picwiz.filter(lambda doc: r.expr(following).contains(doc['username']))\ 
    .limit(5)\ 
    .run(self.db_connection) 

Hier ist, was passiert:

Dieser Filter nimmt eine anonyme Funktion, die Ihre Liste nimmt der Zeichenfolgen following und dann für jedes Dokument in der Tabelle überprüft, ob das Feld Benutzername in dieser Liste über die contains method und True wenn ja, und False wenn nein, Hinzufügen oder Entfernen von den endgültigen Ergebnissen.

Es ist wahrscheinlich auch möglich, die Lambda-Funktion durch die folgende für etwas etwas mehr Pythonic und weniger ReQL-ish zu ersetzen.

lambda doc: doc['username'] in following 
+0

' rethinkdb.errors.ReqlServerCompileError: Kann r.row nicht in verschachtelten Abfragen verwenden. Benutze stattdessen Funktionen in: r.db ('picwiz'). Table ('activity') filter (lambda var_2: r.expr (['d4N73', 'di']). Enthält (lambda var_1: r.row ['username'])). limit (5) ' – Chronix01

+0

es gibt mir diesen fehler, ja folgende ist nur eine liste, und diese python, danke für die antwort :) – Chronix01

+0

Gib meinem edit einen schuss: D – dalanmiller