MongoDB là một cơ sở dữ liệu đa nền tảng, hướng tài liệu, hoạt động dựa trên khái niệm bộ sưu tập và tài liệu. MongoDB cung cấp tốc độ cao, tính sẵn sàng cao và khả năng mở rộng cao
Lấy dữ liệu từ MongoDB
Pymongo cung cấp nhiều phương thức khác nhau để lấy dữ liệu từ mongodb. Hãy xem từng người một
1] Tìm một. Phương thức này được sử dụng để lấy dữ liệu từ bộ sưu tập trong mongoDB. Nó trả về lần xuất hiện đầu tiên.
Cú pháp.
find_one[]
Ví dụ
Cơ sở dữ liệu mẫu
Python3
find[]4
find[]5
find[]6
find[]7
find[]8
find[]9
find[]0
find[]0
find[]1
find[]7
find[]3
find[]4
find[]5
find[]6
find[]7_______57
find[]9____90
find[]5
find[{},{field_data:bool}]2
find[]7
find[{},{field_data:bool}]4
find[{},{field_data:bool}]5
find[{},{field_data:bool}]6
đầu ra
2] Tìm tất cả. Đối với tất cả các lần xuất hiện trong vùng chọn, hãy sử dụng phương thức find[]. Nó hoạt động giống như Select * query của SQL.
cú pháp.
find[]
Ví dụ
Python3
find[]4
find[]5
find[]6
find[]7
find[]8
find[]9
find[]0
find[]0
find[]1
find[]7
find[]3
find[]4
find[]5
find[]6
find[]7_______57
find[]9____90
find[]5
find[{},{field_data:bool}]2
find[]7
find[]58
find[]59
find[]60
find[]61
find[]62
find[]63____95
find[]65
đầu ra.
find_one[] và find[] chấp nhận tham số bộ lọc tùy chọn để chọn tài liệu sẽ đưa vào tập hợp kết quả. Có thể là một tài liệu trống để bao gồm tất cả các tài liệu.
3] Chỉ tìm nạp các trường cụ thể. Nếu bạn chỉ muốn tìm nạp một số trường thì trong phương thức tìm, hãy chuyển tham số đầu tiên là {} và tham số thứ hai là 1 cho những trường bạn muốn tìm nạp và 0 cho những trường bạn không muốn tìm nạp.
Cú pháp.
find[{},{field_data:bool}]
Ví dụ.
Python3
find[]4
find[]5
find[]6
find[]7
find[]8
find[]9
find[]0
find[]0
find[]1
find[]7
find[]3
find[]4
find[]5
find[]6
find[]7_______57
find[]9____90
find[]5
find[]85
find[]86
find[{},{field_data:bool}]2
find[]7
find[]89
find[]90
find[]91
find[]92
find[]93
find[]94
find[]91
find[]96
find[]93
Cách tìm nạp dữ liệu từ các bộ sưu tập khác nhau thông qua hoạt động tập hợp MongoDB— [Giải thích bằng ví dụ]
Một vài ngày trước, tôi đã nói chuyện với một số bạn bè và đồng nghiệp là nhà phát triển của mình và tôi thấy rằng hầu hết chúng ta đã hiểu sai về các giai đoạn tổng hợp và toán tử trong MongoDB. Vì vậy, tôi đã nghĩ đến việc chia sẻ kiến thức và kiến thức của mình về chủ đề này vì tôi thực sự cảm thấy rằng để mở rộng quy mô hệ thống và tăng hiệu suất của các ứng dụng, tối ưu hóa truy vấn cơ sở dữ liệu là một phần không thể thiếu
Trong bài viết này, chúng ta sẽ tìm hiểu về một số kỹ thuật tổng hợp quan trọng và được sử dụng nhiều nhất trong MongoDB. Bạn có thể đánh dấu bài viết này và nó có thể rất hữu ích bất cứ khi nào bạn cần hỗ trợ
Ok, đủ rồi, bắt đầu nào
Tập hợp trong MongoDB là gì?
Tập hợp — như nghĩa đen cho thấy nó liên quan đến việc kết hợp nhiều thứ khác nhau, tương tự như vậy trong MongoDb tập hợp là một kỹ thuật để truy vấn dữ liệu từ nhiều tập hợp bằng cách nhóm hoặc nối chúng, sau đó thực hiện nhiều thao tác khác nhau [được giải thích sau trong tài liệu này] rồi trả về kết quả được tính toán
Hãy lấy một ví dụ về truy vấn tìm kiếm,
find[]0
Bây giờ hãy kiểm tra định dạng của một truy vấn tổng hợp,
find[]1
Vì vậy, bạn có thể thấy truy vấn tổng hợp nâng cao hơn nhiều so với truy vấn tìm và cũng có thể thực hiện các thao tác thao tác dữ liệu trên dữ liệu đã lọc, không giống như truy vấn tìm trong đó một truy vấn bị giới hạn chỉ truy xuất dữ liệu
Giai đoạn đường ống tổng hợp
Trong mọi truy vấn tổng hợp, đường dẫn đã nêu xuất hiện dưới dạng một mảng, trong đó tất cả các hoạt động được đặt tuần tự. Chúng được gọi là Giai đoạn đường ống tổng hợp, trong bài viết này, chúng tôi sẽ đề cập đến những giai đoạn đó là giai đoạn
Chúng ta sẽ thảo luận về tất cả các toán tử khác nhau có sẵn trong truy vấn tổng hợp. Dưới đây là sơ đồ của cơ sở dữ liệu đơn giản mà chúng tôi sẽ thực hiện tất cả các truy vấn,
Bộ sưu tập và Cấu trúc dữ liệu mà chúng tôi sẽ sử dụng cho tất cả các ví dụ
$match
Hoạt động này là để đọc dữ liệu từ một bộ sưu tập dựa trên một biểu thức phù hợp tương tự như truy vấn find[]. Sự khác biệt duy nhất là ở đây quá trình lọc diễn ra thông qua biểu thức truy vấn $expr [ {$expr. {$eq. [‘_id’, ‘123' ] } } ] thay vì biểu thức thô [ { _id. ‘123’ } ] như trong phương thức tìm
Vì vậy, để lấy bản ghi của người dùng có id 123 từ bộ sưu tập Người dùng, bên dưới sẽ là truy vấn tổng hợp,
find[]2
$eq là toán tử khớp ở đây, khớp với ID. Tương tự, chúng ta có thể sử dụng $ne để chọn các tài liệu có giá trị của các khóa không giống với giá trị đã chỉ định
tra cứu $
Tra cứu là giai đoạn thực hiện nối ngoài bên trái với một bộ sưu tập khác và lọc dữ liệu từ các tài liệu đã nối
Vì vậy, trong trường hợp của chúng tôi, nếu chúng tôi muốn nhận tất cả các đơn đặt hàng có tên người dùng, thì chúng tôi có thể sử dụng truy vấn bên dưới,
find[]3
Bây giờ trong truy vấn này, tham số đầu tiên 'từ' chỉ định bộ sưu tập sẽ được kết hợp với bộ sưu tập hiện tại, sau đó 'localField' chỉ định khóa hiện có trong bộ sưu tập hiện tại sẽ khớp với khóa ngoại trong bộ sưu tập khác thông qua . Tại đây, User_ID từ Đơn đặt hàng và ID từ Người dùng được khớp và tham gia để lấy dữ liệu. Cuối cùng, 'as' được sử dụng làm bí danh cho dữ liệu
Một điểm cần lưu ý ở đây là, trong mỗi bản ghi đầu ra từ tra cứu, dữ liệu từ bảng đã tham gia được đưa vào bên trong một mảng dưới dạng phần tử đầu tiên, mỗi một hàng từ dữ liệu đầu ra của truy vấn trên sẽ trông như thế nào,
find[]4
Ở đây trong mảng Khách hàng, phần tử đầu tiên sẽ là dữ liệu chúng ta đã nối
đường ống
Để tham gia các bộ sưu tập với các điều kiện cụ thể yêu cầu biểu thức, chúng tôi sử dụng đường dẫn cùng với $lookup
Vì vậy, nếu chúng tôi muốn nhận được tất cả người dùng với đơn đặt hàng của họ có số lượng lớn hơn 5,
find[]5
Vì vậy, bằng cách sử dụng đường ống bên trong $lookup, chúng ta có thể dễ dàng tham gia các bảng theo bất kỳ điều kiện nào
thư giãn $
Yêu thích cá nhân của tôi, toán tử $unwind làm phẳng bất kỳ mảng nào và đính kèm mảng đó vào tài liệu đầu ra. Vì vậy, truy vấn bên dưới [ giống như truy vấn chúng tôi đã sử dụng trong $lookup ],
find[]6
sẽ cho kết quả
find[]7
Sự khác biệt cơ bản ở đây là $unwind chuyển đổi mảng chứa một phần tử thành một đối tượng phẳng là chính phần tử đó, có cùng tên
find[]8
$addFields
Bây giờ nhiều người sẽ nghĩ điều gì sẽ xảy ra nếu tôi chỉ muốn Khách hàng. Đặt tên nhưng ở cấp gốc của tài liệu để chúng tôi có thể truy cập nó như bên dưới,
find[]9
Rất tiếc, $unwind không thể làm điều này. /
Có siêu anh hùng được gọi là $addFields, bằng cách sử dụng giai đoạn cụ thể này, chúng ta có thể gán bất kỳ dữ liệu nào từ bên trong một đối tượng/mảng cho cấp gốc của tài liệu
Vì vậy, để có được Tên khách hàng như đã đề cập ở trên, chúng ta có thể viết một cái gì đó như -
find[]10
dự án $
Dự án về cơ bản là một giai đoạn lọc trong các truy vấn tổng hợp, nó cho biết các trường nào sẽ được lưu trong tài liệu cuối cùng
Để đưa ra một ví dụ, trong ví dụ trước, chúng ta đã thấy cách chúng ta có thể lấy một Customer_Name làm phẳng bên ngoài đối tượng Customer trong bộ dữ liệu kết quả, tuy nhiên, thuộc tính Customer vẫn sẽ ở đó
Vì chúng tôi đã có Customer_Name, đối tượng Customer không còn cần thiết nữa, vì vậy chúng tôi phải xóa nó và chúng tôi sẽ chỉ giữ lại Tên khách hàng, Số lượng đặt hàng và Item_ID trong đầu ra. Chúng ta có thể làm điều đó bằng cách sử dụng $project,
find[]11
Bây giờ truy vấn trên sẽ cho chúng ta kết quả như thế nào,
find[]12
Tham gia hơn 2 Bộ sưu tập bằng MongoDB Aggregation
Bây giờ có Item_ID trong dữ liệu đầu ra, dữ liệu này không thể đọc được và nếu đó là tên của Mục, thì việc nhận biết dữ liệu đó sẽ dễ dàng hơn nhiều. Hãy làm điều đó,
find[]13
Dưới đây là bảng cheat MongoDB Aggregation có thể rất hữu ích
Được rồi, chúng ta đã học được một số thao tác và giai đoạn quan trọng nhất đối với Tập hợp MongoDB, vui lòng đặt bất kỳ câu hỏi nào trong phần nhận xét, tôi sẽ rất sẵn lòng trả lời những câu hỏi đó.