Tinydb 简明教程

TinyDB - The any() Query

对于搜索包含列表的字段,TinyDB 提供了一个名为 any() 的方法。此方法至少匹配数据库中的一个给定值。它根据所提供的查询找到一个完整列表或一个最小值。

Syntax

TinyDB any () 的语法如下 -

db.search(Query().field.any(query|list)

此处, field 表示我们要访问的数据部分。 Query() 是对我们名为 student 的 JSON 表创建的对象。

  1. 如果我们将 query 作为 any() 方法的参数提供,它将匹配其中列表字段中的至少一个文档与给定查询匹配的所有文档。

  2. 另一方面,如果我们提供 list 作为 any() 方法的参数,它将匹配所有文档,其中列表字段中的至少一个文档出现在给定列表中。

让我们借助几个例子来了解它是如何工作的。我们将使用我们在所有前一章中都曾使用过的相同的 student 数据库。

Example 1

让我们看看如何从我们的 student 表中查找 subject 为 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"
   }
]

Example 2

让我们看看当 any() 方法在给定列表中没有匹配任何内容时如何做出反应 −

from tinydb import TinyDB, Query
db = TinyDB('student.json')
db.search(Query().subject.any(['Oracle']))

此查询将返回一个空值,因为没有 "subject" 为 "Oracle" 的行。

[]

Example 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" 的行。