TinyDB - any() 查询
为了搜索包含列表的字段,TinyDB 提供了一个名为 any() 的方法。 此方法至少匹配数据库中的一个给定值。 它根据提供的查询找到整个列表或最小一个值。
语法
TinyDB any() 语法如下 −
db.search(Query().field.any(query|list)
这里,field代表我们想要访问的数据部分。 Query() 是我们名为 student 的 JSON 表创建的对象。
如果我们提供 query 作为 any() 方法的参数,它将匹配列表字段中至少有一个文档与给定查询匹配的所有文档 。
另一方面,如果我们提供 list 作为 any() 方法的参数,它将匹配给定列表中至少存在列表字段中的一个文档的所有文档。
让我们通过几个示例来了解它是如何工作的。 我们将使用与前面所有章节中使用的相同的student数据库。
示例 1
让我们看看如何从学生表中找到主题为 TinyDB、MySQL、SQL 或任意两个或三个的组合的字段 −
from tinydb import TinyDB, Query db = TinyDB('student.json') db.search(Query().subject.any(['TinyDB', 'MySQL', 'oracle']))
上述查询将获取"subject"字段包含以下值中任意的所有行:"TinyDB"、"MySQL"或"oracle" −
[ { "roll_number":2, "st_name":"Ram", "mark":[ 250, 280 ], "subject":[ "TinyDB", "MySQL" ], "address":"delhi" }, { "roll_number":3, "st_name":"kevin", "mark":[ 180, 200 ], "subject":[ "oracle", "sql" ], "address":"keral" } ]
示例 2
让我们看看 any() 方法在与给定列表中的任何内容都不匹配时如何反应 −
from tinydb import TinyDB, Query db = TinyDB('student.json') db.search(Query().subject.any(['Oracle']))
此查询将返回空白值,因为没有"subject"为"Oracle"的行。
[]
示例 3
请注意它区分大小写。 "subject"字段没有"Oracle",但有"oracle"。 尝试以下查询 −
from tinydb import TinyDB, Query db = TinyDB('student.json') db.search(Query().subject.any(['oracle']))
它将获取下一行 −
[{ 'roll_number': 3, 'st_name': 'kevin', 'mark': [180, 200], 'subject': ['oracle', 'sql'], 'address': 'keral' }]
由于它区分大小写,因此在上一个示例中返回空值,因为没有"subject"为"Oracle"的行。