Đếm bộ sưu tập mongodb

Hướng dẫn này cũng giả định rằng một phiên bản MongoDB đang chạy trên máy chủ và cổng mặc định. Giả sử bạn đã tải xuống và cài đặt MongoDB, bạn có thể bắt đầu nó như sau

$ mongod

Tạo kết nối với MongoClient¶

Bước đầu tiên khi làm việc với PyMongo là tạo một

>>> from pymongo import MongoClient
>>> client = MongoClient()
7 cho phiên bản mongod đang chạy. Làm như vậy là dễ dàng

>>> from pymongo import MongoClient
>>> client = MongoClient()

Đoạn mã trên sẽ kết nối trên máy chủ và cổng mặc định. Chúng tôi cũng có thể chỉ định rõ ràng máy chủ và cổng, như sau

>>> client = MongoClient('localhost', 27017)

Hoặc sử dụng định dạng MongoDB URI

>>> client = MongoClient('mongodb://localhost:27017/')

Lấy cơ sở dữ liệu¶

Một phiên bản duy nhất của MongoDB có thể hỗ trợ nhiều cơ sở dữ liệu độc lập. Khi làm việc với PyMongo, bạn truy cập cơ sở dữ liệu bằng quyền truy cập kiểu thuộc tính trên các phiên bản

>>> from pymongo import MongoClient
>>> client = MongoClient()
7

>>> db = client.test_database

Nếu tên cơ sở dữ liệu của bạn không hoạt động bằng cách sử dụng quyền truy cập kiểu thuộc tính (như

>>> from pymongo import MongoClient
>>> client = MongoClient()
9), thì bạn có thể sử dụng quyền truy cập kiểu từ điển để thay thế

________số 8

Nhận một bộ sưu tập¶

Một bộ sưu tập là một nhóm các tài liệu được lưu trữ trong MongoDB và có thể được coi là tương đương với một bảng trong cơ sở dữ liệu quan hệ. Lấy bộ sưu tập trong PyMongo hoạt động giống như lấy cơ sở dữ liệu

>>> collection = db.test_collection

hoặc (sử dụng quyền truy cập kiểu từ điển)

>>> from pymongo import MongoClient
>>> client = MongoClient()
0

Một lưu ý quan trọng về các bộ sưu tập (và cơ sở dữ liệu) trong MongoDB là chúng được tạo một cách lười biếng - không có lệnh nào ở trên thực sự thực hiện bất kỳ thao tác nào trên máy chủ MongoDB. Bộ sưu tập và cơ sở dữ liệu được tạo khi tài liệu đầu tiên được chèn vào chúng

Các tài liệu¶

Dữ liệu trong MongoDB được biểu diễn (và lưu trữ) bằng tài liệu kiểu JSON. Trong PyMongo, chúng tôi sử dụng từ điển để thể hiện tài liệu. Ví dụ, từ điển sau đây có thể được sử dụng để đại diện cho một bài đăng trên blog

>>> from pymongo import MongoClient
>>> client = MongoClient()
1

Lưu ý rằng các tài liệu có thể chứa các loại Python gốc (như phiên bản

>>> client = MongoClient('localhost', 27017)
0) sẽ được tự động chuyển đổi thành và từ các loại BSON thích hợp

Chèn tài liệu¶

Để chèn một tài liệu vào một bộ sưu tập, chúng ta có thể sử dụng phương thức

>>> client = MongoClient('localhost', 27017)
1

$ mongod
0

Khi tài liệu được chèn vào, một khóa đặc biệt,

>>> client = MongoClient('localhost', 27017)
2, sẽ tự động được thêm vào nếu tài liệu chưa chứa khóa
>>> client = MongoClient('localhost', 27017)
2. Giá trị của
>>> client = MongoClient('localhost', 27017)
2 phải là duy nhất trong bộ sưu tập.
>>> client = MongoClient('localhost', 27017)
1 trả về một thể hiện của
>>> client = MongoClient('localhost', 27017)
6. Để biết thêm thông tin về
>>> client = MongoClient('localhost', 27017)
2, hãy xem tài liệu về _id

Sau khi chèn tài liệu đầu tiên, bộ sưu tập bài đăng đã thực sự được tạo trên máy chủ. Chúng tôi có thể xác minh điều này bằng cách liệt kê tất cả các bộ sưu tập trong cơ sở dữ liệu của chúng tôi

$ mongod
1

Nhận một tài liệu duy nhất với >>> client = MongoClient('localhost', 27017) 8¶

Loại truy vấn cơ bản nhất có thể được thực hiện trong MongoDB là

>>> client = MongoClient('localhost', 27017)
8. Phương thức này trả về một tài liệu duy nhất khớp với một truy vấn (hoặc
>>> client = MongoClient('mongodb://localhost:27017/')
0 nếu không có kết quả khớp). Nó hữu ích khi bạn biết chỉ có một tài liệu phù hợp hoặc chỉ quan tâm đến kết quả phù hợp đầu tiên. Ở đây chúng tôi sử dụng
>>> client = MongoClient('localhost', 27017)
8 để lấy tài liệu đầu tiên từ bộ sưu tập bài viết

$ mongod
2

Kết quả là một từ điển khớp với từ điển mà chúng tôi đã chèn trước đó

Ghi chú

Tài liệu được trả lại chứa một

>>> client = MongoClient('localhost', 27017)
2, được tự động thêm vào khi chèn

>>> client = MongoClient('localhost', 27017)
8 cũng hỗ trợ truy vấn trên các yếu tố cụ thể mà tài liệu kết quả phải phù hợp. Để giới hạn kết quả của chúng tôi trong một tài liệu có tác giả “Mike”, chúng tôi thực hiện

$ mongod
3

Nếu chúng tôi thử với một tác giả khác, chẳng hạn như “Eliot”, chúng tôi sẽ không nhận được kết quả nào

$ mongod
4

Truy vấn theo ObjectId¶

Chúng tôi cũng có thể tìm thấy một bài đăng bằng

>>> client = MongoClient('mongodb://localhost:27017/')
4 của nó, trong ví dụ của chúng tôi là một ObjectId

$ mongod
5

Lưu ý rằng một ObjectId không giống với biểu diễn chuỗi của nó

$ mongod
6

Một nhiệm vụ phổ biến trong các ứng dụng web là lấy ObjectId từ URL yêu cầu và tìm tài liệu phù hợp. Trong trường hợp này, cần chuyển đổi ObjectId từ một chuỗi trước khi chuyển nó sang

>>> client = MongoClient('mongodb://localhost:27017/')
5

$ mongod
7

Xem thêm

Khi tôi truy vấn tài liệu bằng ObjectId trong ứng dụng web của mình, tôi không nhận được kết quả nào

Phụ trang số lượng lớn¶

Để làm cho truy vấn thú vị hơn một chút, hãy chèn thêm một vài tài liệu. Ngoài việc chèn một tài liệu, chúng ta cũng có thể thực hiện các thao tác chèn hàng loạt, bằng cách chuyển một danh sách làm đối số đầu tiên cho

>>> client = MongoClient('mongodb://localhost:27017/')
6. Thao tác này sẽ chèn từng tài liệu vào danh sách, chỉ gửi một lệnh duy nhất đến máy chủ

$ mongod
8

Có một vài điều thú vị cần lưu ý về ví dụ này

  • Kết quả từ

    >>> client = MongoClient('mongodb://localhost:27017/')
    
    6 hiện trả về hai trường hợp
    >>> client = MongoClient('mongodb://localhost:27017/')
    
    8, một trường hợp cho mỗi tài liệu được chèn

  • >>> client = MongoClient('mongodb://localhost:27017/')
    
    9 có “hình dạng” khác với các bài đăng khác - không có trường
    >>> db = client.test_database
    
    0 và chúng tôi đã thêm một trường mới,
    >>> db = client.test_database
    
    1. Đây là điều chúng tôi muốn nói khi nói rằng MongoDB không có lược đồ

Truy vấn nhiều hơn một tài liệu¶

Để nhận được nhiều hơn một tài liệu do kết quả của một truy vấn, chúng tôi sử dụng phương pháp

>>> db = client.test_database
2.
>>> db = client.test_database
2 trả về một phiên bản
>>> db = client.test_database
4, cho phép chúng tôi lặp lại tất cả các tài liệu phù hợp. Ví dụ: chúng ta có thể lặp qua mọi tài liệu trong bộ sưu tập
>>> db = client.test_database
5

$ mongod
9

Giống như chúng tôi đã làm với

>>> client = MongoClient('localhost', 27017)
8, chúng tôi có thể chuyển một tài liệu tới
>>> db = client.test_database
2 để giới hạn kết quả trả về. Ở đây, chúng tôi chỉ lấy những tài liệu có tác giả là “Mike”

>>> from pymongo import MongoClient
>>> client = MongoClient()
0

Đếm¶

Nếu chúng tôi chỉ muốn biết có bao nhiêu tài liệu khớp với một truy vấn, chúng tôi có thể thực hiện thao tác

>>> db = client.test_database
8 thay vì truy vấn đầy đủ. Chúng tôi có thể đếm tất cả các tài liệu trong một bộ sưu tập

>>> from pymongo import MongoClient
>>> client = MongoClient()
1

hoặc chỉ những tài liệu phù hợp với một truy vấn cụ thể

>>> from pymongo import MongoClient
>>> client = MongoClient()
2

Phạm vi truy vấn¶

MongoDB hỗ trợ nhiều loại truy vấn nâng cao khác nhau. Ví dụ: hãy thực hiện truy vấn trong đó chúng tôi giới hạn kết quả đối với các bài đăng cũ hơn một ngày nhất định, nhưng cũng sắp xếp kết quả theo tác giả

>>> from pymongo import MongoClient
>>> client = MongoClient()
3

Ở đây, chúng tôi sử dụng toán tử đặc biệt

>>> db = client.test_database
9 để thực hiện truy vấn phạm vi và cũng gọi
>>> db = client['test-database']
0 để sắp xếp kết quả theo tác giả

Lập chỉ mục¶

Thêm chỉ mục có thể giúp tăng tốc các truy vấn nhất định và cũng có thể thêm chức năng bổ sung để truy vấn và lưu trữ tài liệu. Trong ví dụ này, chúng tôi sẽ trình bày cách tạo một chỉ mục duy nhất trên một khóa từ chối các tài liệu có giá trị cho khóa đó đã tồn tại trong chỉ mục

Đầu tiên, chúng ta sẽ cần tạo chỉ mục

>>> from pymongo import MongoClient
>>> client = MongoClient()
4

Lưu ý rằng chúng tôi có hai chỉ mục bây giờ. một là chỉ mục trên

>>> client = MongoClient('mongodb://localhost:27017/')
4 mà MongoDB tự động tạo và cái còn lại là chỉ mục trên
>>> db = client['test-database']
2 mà chúng ta vừa tạo