Hướng dẫn dùng pymongo find_all python

Để tạo kết nối giữa ngôn ngữ lập trình Python và cơ sở dữ liệu MongoDB, trước tiên chúng ta cần cài đặt trình điều khiển pymongo. Ở đây, chúng tôi đang tạo một ví dụ kết nối với cơ sở dữ liệu và thực hiện các hoạt động cơ sở dữ liệu.

Các bài viết liên quan:

Ví dụ này bao gồm các bước sau:

  1. Install Driver
  1. Tạo File Python

from pymongo import MongoClient # import mongo client to connect  
import pprint  
# Creating instance of mongoclient  
client = MongoClient()  
# Creating database  
db = client.testDB  
employee = {"id": "101",  
"name": "Peter",  
"profession": "Software Engineer",  
}  
# Creating document  
employees = db.employees  
# Inserting data  
employees.insert_one(employee)  
# Fetching data  
pprint.pprint(employees.find_one())  

  1. Thực thi tập lệnh Python
  1. Nhập vào Mongo Shell

Bây giờ, hãy nhập vào trình bao cơ sở dữ liệu MongoDB để xem cơ sở dữ liệu và bộ sưu tập đã tạo.

Chúng ta có thể sử dụng lệnh sau để nhập vào cơ sở dữ liệu.

  1. Kiểm tra cơ sở dữ liệu

Lệnh sau được sử dụng để hiển thị cơ sở dữ liệu có sẵn.

  1. Kiểm tra Collection

Lệnh sau được sử dụng để hiển thị bộ sưu tập có sẵn vào cơ sở dữ liệu.

  1.  Access Records

Chúng tôi có thể xem các bản ghi được lưu trữ trong bộ sưu tập cụ thể. Lệnh sau được sử dụng để hiển thị bản ghi.

Kết nối mongodb MongoDB Python 6

Hôm nay mình sẽ hướng dẫn các bạn về một số cách truy vấn dữ liệu trong MongoDB bằng thư viện pymongo

Cách tạo database, collection và insert dữ liệu các bạn có thể tham khảo tại đây: https://www.w3schools.com/python/python_mongodb_create_db.asp

1. Truy vấn không điều kiện

Phương thức find_one() đế truy xuất ra hàng dữ liệu đầu tiên trong một collection

Ví dụ: Lấy ra sinh viên đầu tiên trong cơ sở dữ liệu

sinhvien = QuanLySinhVienDB.SinhVien.find_one()
Hướng dẫn dùng pymongo find_all python

Phương thức find() để truy xuất ra tất cả các hàng dữ liệu trong một collection

Ví dụ: Lấy ra tất cả sinh viên

listSinhVien = QuanLySinhVienDB.SinhVien.find()

Tuy nhiên với phương thức find() để dữ liệu trả về được hiển thị theo cấu trúc đã được định dạng thì bạn cần convert nó sang list như sau:

listSinhVien = QuanLySinhVienDB.SinhVien.find()
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

2. Truy vấn có điều kiện

Để truy vấn có điều kiện trong MongoDB thì bạn cũng sử dụng cú pháp tương tự như phần 1, nhưng lúc này bạn phải chèn thêm điều kiện vào trong hàm find(), dưới đây là các ví dụ cho từng trường hợp:

Ví dụ 1: Lấy tất cả các sinh viên có mã lớp là ‘Lop2’ (Equality)

query = {'MaLop': 'Lop2'}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Ví dụ 2: Lấy tất cả sinh viên có mã lớp khác ‘Lop1’ (Not Equals)

query = {'Lop': {'$ne': 'Lop1'}}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Ví dụ 3: Lấy tất cả sinh viên có điểm bé hơn 8 (Less Than)

query = {'Diem': {'$lt': 8}}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Ví dụ 4: Lấy tất cả sinh viên có điểm bé hơn hoặc bằng 8 (Less Than Equals)

query = {'Diem': {'lte': 8}}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Ví dụ 5: Lấy tất cả sinh viên có điểm lớn hơn 8 (Greater Than)

query = {'Diem': {'$gt': 8}}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Ví dụ 6: Lấy tất cả sinh viên có điểm lớn hơn hoặc bằng 8 (Greater Than Equals)

query = {'Diem': {'$gte': 8}}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

3. Quy đinh các trường dữ liệu được lấy ra

Bạn có thể quy định các trường mình muốn lấy ra như sau:

Ví dụ 7: Lấy ra tất cả các sinh viên nhưng mỗi sinh viên chỉ lấy trường mã sinh viên và điểm

query = {}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query, {'MaSinhVien': 1, 'Diem': 1})
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Ví dụ 8: Lấy ra danh sách tất cả các sinh viên nhưng trường điểm ẩn đi

query = {}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query, {'Diem': 0})
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Như vậy qua hai ví dụ trên bạn có thể dẽ dàng quy định các trường mình muốn lấy ra (1 là lấy, 0 là ẩn đi)bằng cách: Khi bạn chỉ định một số trường muốn lấy thì đặt là 1 còn các trường khác không đề cập đến nó sẽ tự hiểu là 0 và người lại khi bạn chỉ định một số trường không muốn lấy thì đặt là 0 các trường còn lại tự hiểu là 1

4. Truy xuất sử dụng and và or

andor là để kết hợp hai hoặc nhiều điều kiện để truy xuất dữ liệu, dưới đây là những ví dị cụ thể để các bạn hiểu rõ hơn:

Ví dụ 9: Lấy ra danh sách tất cả sinh viên có mã lớp là ‘Lop1’ và có điểm thấp hơn 8

query = {'$and': [{'Lop': 'Lop1'}, {'Diem': {'$lt': 8}}]}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Ví dụ 10: Lấy tất cả sinh viên có điểm bằng 9 hoặc 10

query = {'$or': [{'Diem': 9}, {'Diem': 10}]}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Bạn cũng có thể sử dụng đồng thời and và or trong cùng một truy xuất

Ví dụ 11: Lấy tất cả các bạn sinh viên có mã lớp là ‘Lop1’ và có điểm bằng 9 hoặc 10

query = {'$and': [{'Lop': 'Lop1'}, {'$or: [{'Diem': 9}, {'Diem': 10}]}]}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

5. Truy xuất có sắp xếp

Trong thực tế, có rất nhiều truy xuất bạn muốn sắp xếp kết quả lấy ra theo một thuộc tính nào đó, để sắp xếp bạn sử dụng phương thức sort() như sau:

Ví dụ 12: Lấy tất cả sinh viên và sắp xếp giảm dần theo điểm

query = {}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query).sort(('Diem', -1))
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Bạn cũng có thể sắp xếp theo nhiều tiêu chí trong một kết quả trả về, ví dụ dưới đây sẽ giải thích cách sử dụng nó

Ví dụ 13: Lấy tất cả sinh viên được sắp xếp tăng dần theo mã lớp và với các sinh viên ở cùng một mã lớp lại sắp xếp giảm dần theo điểm

query = {}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query).sort([('MaLop', 1), ('Diem', -1)])
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Như vậy bạn muốn sắp xếp theo nhiều tiêu chí thì bạn chỉ cần đặt chúng theo thứ tự trong phương thức sort

Ở ví dụ trên bạn thấy 1 là sắp xếp tăng dần và -1 là sắp xếp giảm dần, nhưng bạn cũng có thể sử dụng pymongo.ASCENDING để sắp xếp tăng dần và pymongo.DESCENDING để sắp xếp giảm dần

6. Truy xuất sử dụng limit và skip

limit(n) sử dụng khi bạn chỉ muốn lấy n hàng dữ liệu đầu tiên, lưu ý trường hợp n lớn hơn số phần tử của (số hàng dữ liệu) của collection bạn đang truy xuất thì nó chỉ trả về đúng bằng số phần tử mà nó có

Ví dụ 14: Lấy ra 5 sinh viên đầu tiên

query = {}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query).limit(5)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

skip(n) sử dụng khi bạn muốn lược bỏ n phần tử (hàng dữ liệu) đầu tiên, rồi mới lấy các hàng dữ liệu tiếp theo, nó thường được dùng vào kỹ thuật phân trang

Ví dụ 15: Lược bỏ 5 sinh viên đầu tiên rồi lấy 5 sinh viên tiếp theo

query = {}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query).limit(5).skip(5)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Sử dụng kết hợp sortlimit và skip

Ví dụ 16: Các sinh viên được sắp xếp giảm dần theo điểm, lấy tối đa 5 sinh viên và lược bỏ 2 sinh viên đầu tiên

query = {}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query).sort('Diem', -1).limit(5).skip(2)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

7. Truy xuất sử dụng regex

regex sử dụng để tìm kiếm các chuỗi string theo thành phần của nó

Ví dụ 17: Tìm tất cả các sinh viên, trong họ tên có chữa kí tự A in hoa

query = {'HoTen': {'$regex': 'A'}}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Bạn có thể sử dụng ‘$options’: ‘$i’ để tìm kiếm không phân biệt chữ hoa và chữ thường

Ví dụ 18: Tìm tất cả sinh viên trong họ tên có chữa kí tự a và A

query = {'HoTen': {'$regex': 'A', '$options': '$i'}}
listSinhVien = QuanLySinhVienDB.SinhVien.find(query)
listSinhVien = list(listSinhVien)
Hướng dẫn dùng pymongo find_all python

Bài viết của mình đến đây là kết thúc, chúc các bạn thành công !