重新思考数据库:从字符串列表中匹配一个字符串



这是我在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

最新更新