Mongodb có miễn phí cục bộ không?

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 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

>>> db = client.test_database

Nếu tên cơ sở dữ liệu của bạn không hiệu quả khi sử dụng quyền truy cập kiểu thuộc tính (chẳng hạn 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ế

>>> db = client['test-database']

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)

________số 8_______

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

>>> import datetime
>>> post = {"author": "Mike",
..         "text": "My first blog post!",
..         "tags": ["mongodb", "python", "pymongo"],
..         "date": datetime.datetime.utcnow()}

Lưu ý rằng các tài liệu có thể chứa các loại Python gốc (như các phiên bản) sẽ được tự động chuyển đổi sang và từ các loại BSON thích hợp

Chèn một 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

$ mongod
0

Khi một tài liệu được chèn, 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. trả về một thể hiện của. Để 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

Loại truy vấn cơ bản nhất có thể được thực hiện trong MongoDB là. Phương thức này trả về một tài liệu duy nhất khớp với 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 để 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 có chứa một

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

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

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. 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ừ bây giờ trả về hai trường hợp, 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 thức. trả về một thể hiện, 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 lại mọi tài liệu trong bộ sưu tập

>>> db = client.test_database
5

$ mongod
9

Giống như chúng ta đã làm với , chúng ta có thể chuyển một tài liệu tới để 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 ta chỉ muốn biết có bao nhiêu tài liệu phù hợp với một truy vấn, chúng ta có thể thực hiện một thao tác 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 để 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 chúng ta vừa tạo