Mongodb kích thước mảng tối đa
Nếu bạn chưa làm như vậy, vui lòng dành một phút để đọc phần bắt đầu nhanh để biết cách hoạt động của Mongoose. Nếu bạn đang di chuyển từ 5. x đến 6. x vui lòng dành chút thời gian để đọc hướng dẫn di chuyển Mọi thứ trong Mongoose đều bắt đầu bằng Schema. Mỗi lược đồ ánh xạ tới một bộ sưu tập MongoDB và xác định hình dạng của các tài liệu trong bộ sưu tập đó Nếu bạn muốn thêm các khóa bổ sung sau này, hãy sử dụng phương thức Schema#add Mỗi khóa trong mã 0 của chúng tôi xác định một thuộc tính trong tài liệu của chúng tôi sẽ được truyền tới SchemaType được liên kết của nó. Ví dụ: chúng tôi đã xác định một thuộc tính 1 sẽ được chuyển thành Loại lược đồ chuỗi và thuộc tính 2 sẽ được chuyển thành Loại lược đồ 3Lưu ý ở trên rằng nếu thuộc tính chỉ yêu cầu một loại, thì thuộc tính đó có thể được chỉ định bằng cách sử dụng ký hiệu tốc ký (đối chiếu thuộc tính 1 ở trên với thuộc tính 2)Các khóa cũng có thể được gán các đối tượng lồng nhau chứa các định nghĩa khóa/loại khác như thuộc tính 6 ở trên. Điều này sẽ xảy ra bất cứ khi nào giá trị của khóa là POJO không có thuộc tính 7Trong những trường hợp này, Mongoose chỉ tạo các đường dẫn lược đồ thực tế cho các lá trong cây. (như 8 và 9 ở trên) và các nhánh không có đường dẫn thực tế. Một tác dụng phụ của việc này là 6 ở trên không thể có xác nhận của riêng nó. Nếu cần xác thực trên cây, một đường dẫn cần được tạo trên cây - xem phần Tài liệu phụ để biết thêm thông tin về cách thực hiện việc này. Đồng thời đọc tiểu mục Hỗn hợp của hướng dẫn SchemaTypes để biết một số vấn đềSchemaTypes được phép là Đọc thêm về SchemaTypes tại đây Các lược đồ không chỉ xác định cấu trúc tài liệu của bạn và truyền các thuộc tính, chúng còn xác định các phương thức thể hiện của tài liệu, các phương thức Mô hình tĩnh, chỉ mục phức hợp và móc vòng đời tài liệu được gọi là phần mềm trung gian Để sử dụng định nghĩa lược đồ của chúng tôi, chúng tôi cần chuyển đổi 0 thành Mô hình mà chúng tôi có thể làm việc cùng. Để làm như vậy, chúng tôi chuyển nó vào 22Theo mặc định, Mongoose thêm thuộc tính 23 vào lược đồ của bạnKhi bạn tạo một tài liệu mới với thuộc tính 23 được thêm tự động, Mongoose sẽ tạo một 23 mới thuộc loại ObjectId cho tài liệu của bạnBạn cũng có thể ghi đè lên 23 mặc định của Mongoose bằng 23 của riêng bạn. chỉ cần cẩn thận. Mongoose sẽ từ chối lưu tài liệu không có 23, vì vậy bạn chịu trách nhiệm đặt 23 nếu bạn xác định đường dẫn 23 của riêng mìnhTrường hợp của 11 là tài liệu. Tài liệu có nhiều phương thức thể hiện tích hợp sẵn của riêng chúng. Chúng tôi cũng có thể xác định các phương thức thể hiện tài liệu tùy chỉnh của riêng mìnhGiờ đây, tất cả các phiên bản 12 của chúng tôi đều có sẵn phương thức 13 cho chúng
Bạn cũng có thể thêm các hàm tĩnh vào mô hình của mình. Có ba cách tương đương để thêm một tĩnh
Không khai báo số liệu thống kê bằng các hàm mũi tên ES6 ( 16). Các hàm mũi tên rõ ràng ngăn chặn ràng buộc 17, vì vậy các ví dụ trên sẽ không hoạt động do giá trị của 17Bạn cũng có thể thêm các hàm trợ giúp truy vấn, giống như các phương thức mẫu nhưng dành cho các truy vấn cầy mangut. Các phương thức của trình trợ giúp truy vấn cho phép bạn mở rộng API trình tạo truy vấn có thể xâu chuỗi của cầy mangut MongoDB hỗ trợ các chỉ mục phụ. Với cầy mangut, chúng tôi xác định các chỉ mục này trong 04 của chúng tôi ở cấp độ đường dẫn hoặc cấp độ 05. Việc xác định các chỉ mục ở cấp lược đồ là cần thiết khi tạo các chỉ mục phức hợpXem SchemaType#index() để biết các tùy chọn chỉ mục khác Khi ứng dụng của bạn khởi động, Mongoose sẽ tự động gọi 06 cho từng chỉ mục được xác định trong lược đồ của bạn. Mongoose sẽ gọi 06 cho từng chỉ mục theo tuần tự và phát ra sự kiện 'chỉ mục' trên mô hình khi tất cả các lệnh gọi 06 thành công hoặc khi có lỗi. Mặc dù tốt cho quá trình phát triển, nhưng hành vi này nên bị vô hiệu hóa trong sản xuất vì việc tạo chỉ mục có thể gây ra tác động hiệu suất đáng kể. Vô hiệu hóa hành vi bằng cách đặt tùy chọn 09 của lược đồ của bạn thành 00 hoặc trên toàn cầu trên kết nối bằng cách đặt tùy chọn 09 thành 00Mongoose sẽ phát ra một sự kiện 03 trên mô hình khi các chỉ mục được xây dựng xong hoặc xảy ra lỗiXem thêm phương thức Model#ensureIndexes Ảo là các thuộc tính tài liệu mà bạn có thể lấy và đặt nhưng không được duy trì trong MongoDB. Các getter hữu ích cho việc định dạng hoặc kết hợp các trường, trong khi các setter hữu ích cho việc tách một giá trị thành nhiều giá trị để lưu trữ Giả sử bạn muốn in ra tên đầy đủ của người đó. Bạn có thể tự làm điều đó Nhưng việc nối họ và tên mỗi lần có thể trở nên rườm rà. Và điều gì sẽ xảy ra nếu bạn muốn thực hiện một số xử lý bổ sung đối với tên, chẳng hạn như xóa dấu phụ? Bây giờ, cầy mangut sẽ gọi hàm getter của bạn mỗi khi bạn truy cập thuộc tính 04Nếu bạn sử dụng 06 hoặc 07 cầy mangut sẽ không bao gồm ảo theo mặc định. Điều này bao gồm đầu ra của lệnh gọi 08 trên tài liệu Mongoose, bởi vì 08 gọi 06. Vượt qua 11 đến 07 hoặc 06Bạn cũng có thể thêm một trình thiết lập tùy chỉnh vào ảo của mình để cho phép bạn đặt cả họ và tên thông qua ảo 04Trình thiết lập thuộc tính ảo được áp dụng trước khi xác thực khác. Vì vậy, ví dụ trên sẽ vẫn hoạt động ngay cả khi trường tên 15 và 16 được yêu cầuChỉ các thuộc tính không ảo mới hoạt động như một phần của truy vấn và để chọn trường. Vì ảo không được lưu trữ trong MongoDB nên bạn không thể truy vấn với chúng Bạn có thể tìm hiểu thêm về ảo tại đây Bí danh là một loại ảo cụ thể trong đó getter và setter nhận và đặt thuộc tính khác một cách liền mạch. Điều này rất hữu ích để tiết kiệm băng thông mạng, vì vậy bạn có thể chuyển đổi một tên thuộc tính ngắn được lưu trữ trong cơ sở dữ liệu thành một tên dài hơn để mã có thể đọc được Bạn cũng có thể khai báo bí danh trên các đường dẫn lồng nhau. Việc sử dụng các lược đồ và tài liệu con lồng nhau sẽ dễ dàng hơn, nhưng bạn cũng có thể khai báo các bí danh đường dẫn lồng nhau trong dòng miễn là bạn sử dụng toàn bộ đường dẫn lồng nhau 17 làm bí danhCác lược đồ có một vài tùy chọn có thể định cấu hình có thể được chuyển đến hàm tạo hoặc phương thức 18Tùy chọn hợp lệ Theo mặc định, hàm 19 của Mongoose tạo tất cả các chỉ mục được xác định trong lược đồ mô hình của bạn bằng cách gọi 00 sau khi bạn kết nối thành công với MongoDB. Tạo chỉ mục tự động rất tốt cho môi trường phát triển và thử nghiệm. Nhưng các bản dựng chỉ mục cũng có thể tạo ra tải trọng đáng kể trên cơ sở dữ liệu sản xuất của bạn. Nếu bạn muốn quản lý các chỉ mục một cách cẩn thận trong quá trình sản xuất, bạn có thể đặt 09 thành false 2Tùy chọn 09 được đặt thành 03 theo mặc định. Bạn có thể thay đổi mặc định này bằng cách đặt 04Trước khi Mongoose xây dựng các chỉ mục, theo mặc định, nó gọi 05 để tạo bộ sưu tập cơ bản trong MongoDB. Gọi 06 đặt đối chiếu mặc định của bộ sưu tập dựa trên tùy chọn đối chiếu và thiết lập bộ sưu tập dưới dạng bộ sưu tập giới hạn nếu bạn đặt tùy chọn lược đồ 07Bạn có thể vô hiệu hóa hành vi này bằng cách đặt 08 thành 00 bằng cách sử dụng 10. Giống như 09, 08 hữu ích cho các môi trường thử nghiệm và phát triển, nhưng bạn có thể muốn tắt nó để sản xuất để tránh các cuộc gọi cơ sở dữ liệu không cần thiếtThật không may, 06 không thể thay đổi bộ sưu tập hiện có. Ví dụ: nếu bạn thêm 14 vào lược đồ của mình và bộ sưu tập hiện có không bị giới hạn, thì 06 sẽ không ghi đè lên bộ sưu tập hiện có. Đó là bởi vì máy chủ MongoDB không cho phép thay đổi tùy chọn của bộ sưu tập mà không loại bỏ bộ sưu tập trướcTheo mặc định, mongoose đệm các lệnh khi kết nối bị ngắt cho đến khi trình điều khiển quản lý để kết nối lại. Để tắt tính năng đệm, hãy đặt 16 thành false
Tùy chọn lược đồ 16 ghi đè tùy chọn 16 toàn cầuNếu 16 được bật, tùy chọn này sẽ đặt lượng thời gian tối đa mà bộ đệm Mongoose sẽ đợi trước khi đưa ra lỗi. Nếu không được chỉ định, Mongoose sẽ sử dụng 10000 (10 giây)Mongoose hỗ trợ các bộ sưu tập giới hạn MongoDB. Để chỉ định bộ sưu tập MongoDB cơ bản là 07, hãy đặt tùy chọn 07 thành kích thước tối đa của bộ sưu tập theo byte 2Tùy chọn 07 cũng có thể được đặt thành một đối tượng nếu bạn muốn chuyển các tùy chọn bổ sung như max hoặc autoIndexId. Trong trường hợp này, bạn phải vượt qua tùy chọn 63 một cách rõ ràng, đây là tùy chọn bắt buộc 1Mongoose theo mặc định tạo tên bộ sưu tập bằng cách chuyển tên mô hình cho các tiện ích. phương thức toCollectionName. Phương pháp này số nhiều tên. Đặt tùy chọn này nếu bạn cần một tên khác cho bộ sưu tập của mình 0Khi bạn xác định một bộ phân biệt đối xử, Mongoose sẽ thêm một đường dẫn vào lược đồ của bạn để lưu trữ bộ phân biệt mà một tài liệu là một thể hiện của. Theo mặc định, Mongoose thêm đường dẫn 64, nhưng bạn có thể đặt 65 để ghi đè đường dẫn mặc định nàyMongoose gán cho mỗi lược đồ của bạn một trình nhận ảo 66 theo mặc định, trả về trường 23 của tài liệu được truyền thành một chuỗi hoặc trong trường hợp của ObjectIds, chuỗi hexString của nó. Nếu bạn không muốn thêm trình thu thập 66 vào lược đồ của mình, bạn có thể tắt nó bằng cách chuyển tùy chọn này vào thời điểm xây dựng lược đồMongoose gán cho mỗi lược đồ của bạn một trường 23 theo mặc định nếu một lược đồ không được chuyển vào hàm tạo Schema. Loại được gán là một ObjectId trùng với hành vi mặc định của MongoDB. Nếu bạn hoàn toàn không muốn thêm một 23 vào lược đồ của mình, bạn có thể tắt nó bằng tùy chọn nàyBạn chỉ có thể sử dụng tùy chọn này trên các tài liệu phụ. Mongoose không thể lưu tài liệu mà không biết id của nó, vì vậy bạn sẽ gặp lỗi nếu cố lưu tài liệu mà không có 23Theo mặc định, Mongoose sẽ "thu nhỏ" các lược đồ bằng cách xóa các đối tượng trống Hành vi này có thể được ghi đè bằng cách đặt tùy chọn 02 thành 00. Sau đó, nó sẽ lưu trữ các đối tượng trốngĐể kiểm tra xem một đối tượng có trống không, bạn có thể sử dụng trình trợ giúp 04Cho phép đặt tùy chọn query#read ở cấp lược đồ, cung cấp cho chúng tôi cách áp dụng ReadPreferences mặc định cho tất cả các truy vấn bắt nguồn từ một mô hình Bí danh của mỗi pref cũng được cho phép, vì vậy thay vì phải gõ 'secondaryPreferred' và viết sai chính tả, chúng ta chỉ cần chuyển 'sp' Tùy chọn đọc cũng cho phép chúng tôi chỉ định bộ thẻ. Những thông báo này cho trình điều khiển biết các thành viên của bộ bản sao mà nó sẽ cố gắng đọc. Đọc thêm về bộ thẻ tại đây và tại đây GHI CHÚ. bạn cũng có thể chỉ định tùy chọn chiến lược ưu tiên đọc trình điều khiển khi kết nối Cho phép đặt mối quan tâm ghi ở cấp lược đồ 0Tùy chọn 05 được sử dụng khi chúng ta có kiến trúc MongoDB được phân đoạn. Mỗi bộ sưu tập phân đoạn được cung cấp một khóa phân đoạn phải có trong tất cả các thao tác chèn/cập nhật. Chúng tôi chỉ cần đặt tùy chọn lược đồ này thành cùng một khóa phân đoạn và chúng tôi sẽ hoàn tất 1Lưu ý rằng Mongoose không gửi lệnh 06 cho bạn. Bạn phải tự định cấu hình phân đoạn của mìnhTùy chọn nghiêm ngặt, (được bật theo mặc định), đảm bảo rằng các giá trị được chuyển đến hàm tạo mô hình của chúng tôi không được chỉ định trong lược đồ của chúng tôi sẽ không được lưu vào db Điều này cũng ảnh hưởng đến việc sử dụng 07 để đặt giá trị thuộc tínhGiá trị này có thể được ghi đè ở cấp độ phiên bản mô hình bằng cách chuyển đối số boolean thứ hai Tùy chọn 08 cũng có thể được đặt thành 09, điều này sẽ gây ra lỗi thay vì loại bỏ dữ liệu xấuGHI CHÚ. Bất kỳ khóa/giá trị nào được đặt trên phiên bản không tồn tại trong lược đồ của bạn luôn bị bỏ qua, bất kể tùy chọn lược đồ là gì Mongoose hỗ trợ tùy chọn 10 riêng biệt để tránh chế độ nghiêm ngặt cho các bộ lọc truy vấn. Điều này là do bộ lọc truy vấn trống khiến Mongoose trả lại tất cả tài liệu trong mô hình, điều này có thể gây ra sự cốTùy chọn 08 áp dụng cho các bản cập nhật. Tùy chọn 10 chỉ dành cho bộ lọc truy vấnMongoose có tùy chọn 10 riêng để chuyển chế độ nghiêm ngặt cho tham số 14 thành truy vấnNói chung, chúng tôi khuyên bạn không nên chuyển các đối tượng do người dùng xác định làm bộ lọc truy vấn Trong Mongoose 6, theo mặc định, 10 bằng với 08. Tuy nhiên, bạn có thể ghi đè hành vi này trên toàn cầuTrong Mongoose 7, giá trị mặc định của 10 sẽ được chuyển về 00. Bạn có thể chuẩn bị cho sự thay đổi bằng cách chỉ địnhHoàn toàn giống với tùy chọn toObject nhưng chỉ áp dụng khi phương thức 19 của tài liệu được gọiĐể xem tất cả các tùy chọn có sẵn của 20, hãy đọc phần nàyCác tài liệu có một phương thức toObject để chuyển đổi tài liệu cầy mangut thành một đối tượng JavaScript đơn giản. Phương pháp này chấp nhận một số tùy chọn. Thay vì áp dụng các tùy chọn này trên cơ sở từng tài liệu, chúng tôi có thể khai báo các tùy chọn ở cấp lược đồ và áp dụng chúng cho tất cả các tài liệu của lược đồ theo mặc định Để tất cả các ảo hiển thị trong đầu ra 21 của bạn, hãy đặt tùy chọn 22 thành 23Để xem tất cả các tùy chọn 22 có sẵn, hãy đọc phần nàyTheo mặc định, nếu bạn có một đối tượng có khóa 'type' trong lược đồ của mình, cầy mangut sẽ diễn giải nó dưới dạng khai báo kiểu Tuy nhiên, đối với các ứng dụng như GeoJSON, thuộc tính 'type' rất quan trọng. Nếu bạn muốn kiểm soát cầy mangut khóa nào sử dụng để tìm khai báo kiểu, hãy đặt tùy chọn lược đồ 'typeKey' Theo mặc định, các tài liệu được tự động xác thực trước khi chúng được lưu vào cơ sở dữ liệu. Điều này là để ngăn việc lưu một tài liệu không hợp lệ. Nếu bạn muốn xử lý xác thực theo cách thủ công và có thể lưu các đối tượng không vượt qua xác thực, bạn có thể đặt 25 thành false 26 là một thuộc tính được đặt trên mỗi tài liệu khi được Mongoose tạo lần đầu tiên. Giá trị khóa này chứa bản sửa đổi nội bộ của tài liệu. Tùy chọn 26 là một chuỗi đại diện cho đường dẫn sử dụng để lập phiên bản. Mặc định là 28. Nếu điều này xung đột với ứng dụng của bạn, bạn có thể định cấu hình như vậyLưu ý rằng phiên bản mặc định của Mongoose không phải là một giải pháp đồng thời lạc quan đầy đủ. Phiên bản mặc định của Mongoose chỉ hoạt động trên các mảng như hình bên dưới Nếu bạn cần hỗ trợ đồng thời tối ưu cho 29, bạn có thể đặt tùy chọn 30Phiên bản tài liệu cũng có thể bị vô hiệu hóa bằng cách đặt 26 thành 00. KHÔNG vô hiệu hóa phiên bản trừ khi bạn biết mình đang làm gìMongoose chỉ cập nhật khóa phiên bản khi bạn sử dụng 29. Nếu bạn sử dụng 34, 35, v.v. Mongoose sẽ không cập nhật khóa phiên bản. Như một giải pháp thay thế, bạn có thể sử dụng phần mềm trung gian bên dưới 0Đồng thời lạc quan là một chiến lược để đảm bảo tài liệu bạn đang cập nhật không thay đổi giữa khi bạn tải nó bằng cách sử dụng 36 hoặc 37 và khi bạn cập nhật nó bằng cách sử dụng 29Ví dụ: giả sử bạn có một mô hình 39 chứa danh sách 40 và một 41 thể hiện liệu ngôi nhà này có xuất hiện trong các tìm kiếm hay không. Giả sử rằng một ngôi nhà có trạng thái 42 phải có ít nhất hai 40. Bạn có thể thực hiện logic phê duyệt tài liệu nhà như hình dưới đây 1Hàm 44 có vẻ đúng khi tách biệt, nhưng có thể có sự cố tiềm ẩn. điều gì sẽ xảy ra nếu một chức năng khác xóa ảnh của ngôi nhà giữa cuộc gọi 37 và cuộc gọi 29? Nếu bạn đặt tùy chọn 30 trên lược đồ của mô hình 39, tập lệnh trên sẽ báo lỗiĐặt đối chiếu mặc định cho mọi truy vấn và tổng hợp. Dưới đây là tổng quan thân thiện với người mới bắt đầu về các bộ sưu tập Nếu bạn đặt tùy chọn 49 trên lược đồ, Mongoose sẽ tạo bộ sưu tập chuỗi thời gian cho bất kỳ mô hình nào bạn tạo từ lược đồ đó 50 cho phép loại trừ các đường dẫn khỏi phiên bản (i. e. , bản sửa đổi nội bộ sẽ không được tăng lên ngay cả khi các đường dẫn này được cập nhật). KHÔNG làm điều này trừ khi bạn biết bạn đang làm gì. Đối với các tài liệu phụ, hãy đưa tài liệu này vào tài liệu gốc bằng cách sử dụng đường dẫn đủ điều kiệnTùy chọn 51 yêu cầu Mongoose gán các trường 52 và 53 cho lược đồ của bạn. Loại được chỉ định là NgàyTheo mặc định, tên của các trường là 52 và 53. Tùy chỉnh tên trường bằng cách đặt 56 và 57Cách thức hoạt động của 51 dưới mui xe là
Theo mặc định, Mongoose sử dụng 67 để lấy thời gian hiện tại. Nếu bạn muốn ghi đè chức năng mà Mongoose sử dụng để lấy thời gian hiện tại, bạn có thể đặt tùy chọn 68. Mongoose sẽ gọi hàm 68 bất cứ khi nào nó cần lấy thời gian hiện tạiMongoose hỗ trợ xác định các plugin toàn cầu, các plugin áp dụng cho tất cả các lược đồ Đôi khi, bạn có thể chỉ muốn áp dụng một plugin nhất định cho một số lược đồ. Trong trường hợp đó, bạn có thể thêm 70 vào lược đồ 6Nếu bạn gọi 71 với tùy chọn 72, Mongoose sẽ chỉ áp dụng plugin đó cho các lược đồ có mục phù hợp trong 70Theo mặc định, Mongoose sẽ tự động 74 bất kỳ đường dẫn nào được điền cho bạn, trừ khi bạn loại trừ chúng một cách rõ ràngĐể từ chối chọn các trường được điền theo mặc định, hãy đặt 75 thành 00 trong lược đồ của bạnVì các lý do cũ, khi có lỗi xác thực trong đường dẫn con của một lược đồ lồng nhau, Mongoose cũng sẽ ghi lại rằng cũng có lỗi xác thực trong đường dẫn lược đồ lồng nhau. Ví dụ Đặt 77 thành 00 trên lược đồ con để khiến Mongoose chỉ báo cáo lỗi gốcCác lược đồ có một phương thức 79 mà bạn có thể sử dụng để tạo một lược đồ Mongoose từ một lớp ES6Đây là một ví dụ về việc sử dụng 79 để tạo một lược đồ từ một lớp ES6Các lược đồ cũng có thể cắm được, cho phép chúng tôi đóng gói các tính năng có thể tái sử dụng thành các plugin có thể chia sẻ với cộng đồng hoặc chỉ giữa các dự án của bạn Đây là phần giới thiệu thay thế cho các lược đồ Mongoose Để tận dụng tối đa MongoDB, bạn cần tìm hiểu kiến thức cơ bản về thiết kế lược đồ MongoDB. Thiết kế lược đồ SQL (dạng chuẩn thứ ba) được thiết kế để giảm thiểu chi phí lưu trữ, trong khi thiết kế lược đồ MongoDB là thực hiện các truy vấn phổ biến nhanh nhất có thể. Chuỗi blog 6 Rules of Thumb for MongoDB Schema Design là một tài nguyên tuyệt vời để tìm hiểu các quy tắc cơ bản giúp thực hiện các truy vấn của bạn nhanh chóng Người dùng đang tìm cách làm chủ thiết kế lược đồ MongoDB trong Node. js nên xem cuốn The Little MongoDB Schema Design Book của Christian Kvalheim, tác giả gốc của MongoDB Node. trình điều khiển js. Cuốn sách này chỉ cho bạn cách triển khai các lược đồ hiệu suất cho danh sách các trường hợp sử dụng đã được giặt sạch, bao gồm thương mại điện tử, wiki và đặt lịch hẹn |