0

これは rethinkDB の私のテーブルです

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

(field列)nameは繰り返すことができます。私は持っていlist ['row1', 'row2']ます。

クエリを実行して、に存在するすべてのdocuments(行)を取得したいnamelist

これまでのところ、私はこれを持っています:

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)

followinglistこちらです。

しかし、これはすべてのdocuments(行)を返します

4

1 に答える 1

0

これがPythonであると仮定します。私が理解していることから、これfollowingは単なるリストであると考えて、あなたはこのようなものが欲しいということだと思います:

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)

何が起こっているかは次のとおりです。

このフィルターは、呼び出された文字列のリストを取得する匿名関数を受け取り、テーブル内のすべてのドキュメントに対して、メソッドfollowingを介してユーザー名フィールドがそのリストにあるかどうかを確認し、はいの場合は返し、いいえの場合は最終的に追加または削除します結果。containsTrueFalse

おそらく、ラムダ関数を次のように置き換えて、もう少し Pythonic で ReQL 風ではないものにすることも可能です。

lambda doc: doc['username'] in following
于 2016-04-13T22:02:48.897 に答える