Truy vấn any() trong TinyDB
Trong TinyDB, phương thức any()
là một công cụ mạnh mẽ dùng để tìm kiếm và truy xuất dữ liệu từ các trường có chứa danh sách. Với khả năng khớp ít nhất một giá trị trong danh sách với truy vấn đã cung cấp, any()
giúp chúng ta dễ dàng tìm kiếm các mục có chứa các giá trị cụ thể, từ đó tối ưu hóa quá trình truy vấn dữ liệu trong cơ sở dữ liệu JSON.
TinyDB cung cấp một phương thức gọi là any()
để tìm kiếm các trường chứa danh sách. Phương thức này giúp khớp ít nhất một giá trị từ cơ sở dữ liệu. Nó có thể tìm cả danh sách hoàn chỉnh hoặc chỉ cần có một giá trị khớp với truy vấn đã cung cấp.
Cú pháp của phương thức any()
trong TinyDB
db.search(Query().field.any(query|list))
Ở đây:
field
là trường dữ liệu mà chúng ta muốn truy cập.Query()
là đối tượng được tạo ra từ bảng JSON, ví dụ như bảngstudent
.
Nếu chúng ta cung cấp một truy vấn (query
) làm đối số cho phương thức any()
, nó sẽ khớp tất cả các tài liệu mà ít nhất một tài liệu trong trường danh sách khớp với truy vấn đã cho.
Bài viết này được đăng tại [free tuts .net]
Ngược lại, nếu chúng ta cung cấp một danh sách (list
) làm đối số cho any()
, nó sẽ khớp tất cả các tài liệu mà ít nhất một tài liệu trong trường danh sách có mặt trong danh sách đã cho.
Hãy cùng tìm hiểu cách thức hoạt động của any()
qua một vài ví dụ. Chúng ta sẽ sử dụng cùng cơ sở dữ liệu sinh viên như các chương trước.
Ví dụ 1
Tìm các trường trong bảng sinh viên (student
) mà môn học là TinyDB
, MySQL
, hoặc oracle
, hoặc sự kết hợp của bất kỳ hai hay ba môn học này:
from tinydb import TinyDB, Query db = TinyDB('student.json') db.search(Query().subject.any(['TinyDB', 'MySQL', 'oracle']))
Truy vấn trên sẽ trả về tất cả các hàng có trường "subject" chứa bất kỳ giá trị nào sau đây: "TinyDB", "MySQL", hoặc "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" } ]
Ví dụ 2
Bây giờ, hãy thử xem phương thức any()
phản ứng thế nào khi nó không khớp với bất kỳ giá trị nào trong danh sách đã cho:
from tinydb import TinyDB, Query db = TinyDB('student.json') db.search(Query().subject.any(['Oracle']))
Truy vấn này sẽ trả về một giá trị rỗng vì không có hàng nào có trường "subject" là "Oracle".
[]
Ví dụ 3
Lưu ý rằng phương thức any()
có phân biệt chữ hoa, chữ thường. Trường "subject" không có "Oracle", nhưng có "oracle". Hãy thử truy vấn sau:
from tinydb import TinyDB, Query db.search(Query().subject.any(['oracle']))
Nó sẽ trả về hàng sau:
[{ 'roll_number': 3, 'st_name': 'kevin', 'mark': [180, 200], 'subject': ['oracle', 'sql'], 'address': 'keral' }]
Do truy vấn phân biệt chữ hoa, chữ thường nên truy vấn trước đó không trả về kết quả vì không có hàng nào có "subject" là "Oracle".
Kết bài
Phương thức any()
trong TinyDB là một công cụ linh hoạt và hữu ích khi làm việc với các trường dữ liệu dạng danh sách. Bằng cách cho phép truy vấn với ít nhất một giá trị trong danh sách, nó giúp tối ưu hóa việc tìm kiếm và lọc dữ liệu theo nhu cầu cụ thể. Việc sử dụng hiệu quả any()
giúp quá trình xử lý dữ liệu trở nên nhanh chóng và chính xác hơn trong các ứng dụng thực tế.