这是我在rethinkDB 中的表
[{"username": "row1", "some_key": ["str1", "str2"]}, {"username": "row2", "some_key": ["str3", "blah"]}, {"username": "row3", "some_key": ["blah", "blahblah"]}]
可以重复field
(列)name
。我有一个list
['row1', 'row2']
。
我想运行查询并获取list
中存在name
的所有documents
(行)
到目前为止,我有这个:
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
就是list
。
但这会返回所有documents
(行)
假设这是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
的字符串列表,然后对于表中的每个文档,通过contains
方法检查用户名字段是否在该列表中,如果是,则返回True
,如果不是,则返回False
,将其从最终结果中添加或删除。
也可以用以下内容替换lambda函数,以获得更Python化、更少ReQL化的内容。
lambda doc: doc['username'] in following