Hướng dẫn does mongodb support enum? - mongodb có hỗ trợ enum không?

TL; DR: Chuỗi có lẽ là sự lựa chọn an toàn hơn và sự khác biệt về hiệu suất nên không đáng kể. Các số nguyên có ý nghĩa đối với các bộ sưu tập lớn trong đó enum phải được lập chỉ mục. Ymmv.

Show

Nội dung chính ShowShow

  • Thực hiện
  • Tạo nhà cung cấp codec
  • Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS).
  • Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS).
  • Chúng ta có thể lưu trữ enum trong MongoDB không?
  • Các enum được lưu trữ trong cơ sở dữ liệu như thế nào?
  • Enum trong lược đồ Mongoose là gì?
  • Việc sử dụng enum trong Mongoose là gì?

Tôi đã nghĩ đến việc lưu trữ nó bằng các số nguyên mà tôi cho rằng sử dụng ít không gian hơn là lưu trữ các chuỗi cho mọi thứ có thể dễ dàng được thể hiện dưới dạng một số nguyên

True.

Mặt khác tôi thấy khi sử dụng số nguyên là nếu tôi muốn đổi tên thành tích hoặc thứ hạng, tôi có thể dễ dàng thay đổi nó mà không phải chạm vào cơ sở dữ liệu.

Đây là một lợi ích chính của số nguyên theo ý kiến ​​của tôi. Tuy nhiên, nó cũng đòi hỏi bạn phải đảm bảo các giá trị liên quan của

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
1 không thay đổi. Nếu bạn vặn nó lên, bạn gần như chắc chắn sẽ tàn phá, đó là một bất lợi lớn.almost certainly wreak havoc, which is a huge disadvantage.almost certainly wreak havoc, which is a huge disadvantage.

Một lợi ích tôi thấy khi sử dụng chuỗi là dữ liệu đòi hỏi ít xử lý hơn trước khi nó được sử dụng

Nếu bạn thực sự sử dụng một loại dữ liệu enum, có lẽ đó là một số nguyên trong nội bộ, vì vậy số nguyên nên yêu cầu ít xử lý hơn. Dù bằng cách nào, chi phí đó nên không đáng kể.

Có một lý do mạnh mẽ để sử dụng số nguyên hoặc chuỗi?

Tôi đang lặp lại rất nhiều những gì đã nói, nhưng có lẽ điều đó giúp các độc giả khác. Tổng hợp:

  • Trộn giá trị ENUM HAVOCS HAVOC. Hãy tưởng tượng các quốc gia
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    2 của bạn đột nhiên được hiểu là
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    3, bởi vì
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    2 có giá trị '2' và bây giờ là
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    3 vì bạn đã sắp xếp lại enum và quên gán các giá trị theo cách thủ công ... (rùng mình)
  • Chuỗi biểu cảm hơn
  • Số nguyên mất ít không gian hơn. Không gian đĩa không quan trọng, thông thường, nhưng không gian chỉ số sẽ ăn RAM đắt tiền.
  • Cập nhật số nguyên không thay đổi kích thước đối tượng. Chuỗi, nếu độ dài của chúng khác nhau rất nhiều, có thể yêu cầu phân bổ lại. Tuy nhiên, yếu tố đệm và đệm nên làm giảm bớt điều này.
  • Các số nguyên có thể là cờ (chưa thể truy vấn (chưa), thật không may, xem Server-3518)
  • Các số nguyên có thể được truy vấn bởi
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    6 /
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    7 để bạn có thể thực hiện hiệu quả các truy vấn
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    8 phức tạp, mặc dù đó là một yêu cầu khá phức tạp và không có gì sai với các truy vấn
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    8 ...

Hướng dẫn does mongodb support enum? - mongodb có hỗ trợ enum không?

Nếu bạn muốn lưu giá trị enum java vào db dưới dạng tên enum, thì trình điều khiển Mongo sẽ hỗ trợ điều đó. Ví dụ: nếu bạn có một enum

public enum ProcessType {
    CONVERT_ONE_TO_ONE,
    CONVERT_ONE_TO_MANY;
}

Nhập chế độ FullScreenen EXIT Mode FullScreen

và nó được đăng ký với nhà cung cấp codec Mongo là

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);

Nhập chế độ FullScreenen EXIT Mode FullScreen

và nó được đăng ký với nhà cung cấp codec Mongo là

Sau đó, bất cứ khi nào bạn lưu một thể hiện của một lớp với một loại thuộc tính ProcessType vào DB, tài liệu Mongo kết quả sẽ có giá trị chuỗi

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
10 hoặc
import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
11 cho thuộc tính đó.

Nếu đó là tất cả những gì bạn cần, thì điều sau đây không dành cho bạn. Trong trường hợp đó, bạn có thể làm theo hướng dẫn của Mongo Pojo để hướng dẫn bạn.

  • Sau đây là một cách để lưu trữ giá trị liên quan đến enum java trong MongoDB. Tại sao ai đó muốn làm điều đó?
  • Java (cũng TypeScript) có quy ước sử dụng tên trường hợp trên trong enums, có lẽ được kế thừa từ việc sử dụng tên chữ hoa cho các hằng số.
  • Tôi thích gán các giá trị chữ thường cho các thuộc tính đối tượng (như nhiều người làm)

Ngăn chặn tên tài sản buộc vào giá trị của nó. Tôi thích giữ ngắn tên biến và giá trị được gán cho nó có thể là bất cứ điều gì.

Trên đây là một vài lý do để lưu các giá trị enum thay vì tên vào MongoDB.

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
1

Một điểm đau khác đối với tôi là so sánh các giá trị enum được giải mã ở phía trước. Sau đây là enum TypeScript Front-end cho Java enum trên.

Nhập chế độ FullScreenen EXIT Mode FullScreen

Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS).

Thực hiện

Steps:

  1. Chúng ta có thể lưu trữ enum trong MongoDB không?
  2. Tạo và đăng ký Bộ giải mã Enum cho
    import org.bson.codecs.pojo.ClassModel;
    import org.bson.codecs.pojo.PojoCodecProvider;
    import org.bson.codecs.pojo.PojoCodecProvider.Builder;
    import com.ps2pdf.models.enums.ProcessType; // Local
    ...
    Builder builder = <your mongo builder>
    ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
    builder.register(classModel);
    
    12
  3. Tạo và đăng ký Enum với DB

Tôi sẽ làm cho một số lớp là chung chung vì điều này có thể được sử dụng để giải mã tất cả các enum.

Tạo nhà cung cấp codec

Tôi sẽ không cung cấp nhập khẩu vì bạn nên có Trình điều khiển Mongo Java và với IDE hiện đại, bạn có thể tự động nhập tất cả nhập khẩu.

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
5

Nhập chế độ FullScreenen EXIT Mode FullScreen

Nếu chúng tôi sử dụng bộ giải mã enum mặc định được cung cấp bởi Mongo Java Driver, thì các giá trị của chúng tôi phải giống như tên trên Java Enum, quá kết hợp và nghiêm ngặt để chúng tôi viết mã dễ đọc hơn.

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
6

Nhập chế độ FullScreenen EXIT Mode FullScreen

Nếu chúng tôi sử dụng bộ giải mã enum mặc định được cung cấp bởi Mongo Java Driver, thì các giá trị của chúng tôi phải giống như tên trên Java Enum, quá kết hợp và nghiêm ngặt để chúng tôi viết mã dễ đọc hơn.

Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS).

Thực hiện

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
7

Nhập chế độ FullScreenen EXIT Mode FullScreen

Nếu chúng tôi sử dụng bộ giải mã enum mặc định được cung cấp bởi Mongo Java Driver, thì các giá trị của chúng tôi phải giống như tên trên Java Enum, quá kết hợp và nghiêm ngặt để chúng tôi viết mã dễ đọc hơn.

Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS).

Thực hiện

Tạo và đăng ký một nhà cung cấp codec với Cơ quan đăng ký mã Mongo mà Mongo sử dụng để xác định bộ giải mã enum nào để sử dụng giá trị enum java

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
8

Nhập chế độ FullScreenen EXIT Mode FullScreen

Nếu chúng tôi sử dụng bộ giải mã enum mặc định được cung cấp bởi Mongo Java Driver, thì các giá trị của chúng tôi phải giống như tên trên Java Enum, quá kết hợp và nghiêm ngặt để chúng tôi viết mã dễ đọc hơn.

Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS).

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
9

Nhập chế độ FullScreenen EXIT Mode FullScreen

Nếu chúng tôi sử dụng bộ giải mã enum mặc định được cung cấp bởi Mongo Java Driver, thì các giá trị của chúng tôi phải giống như tên trên Java Enum, quá kết hợp và nghiêm ngặt để chúng tôi viết mã dễ đọc hơn.

Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS).

Thực hiện

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
0

Nhập chế độ FullScreenen EXIT Mode FullScreen

Nếu chúng tôi sử dụng bộ giải mã enum mặc định được cung cấp bởi Mongo Java Driver, thì các giá trị của chúng tôi phải giống như tên trên Java Enum, quá kết hợp và nghiêm ngặt để chúng tôi viết mã dễ đọc hơn.

import org.bson.codecs.pojo.ClassModel;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.codecs.pojo.PojoCodecProvider.Builder;
import com.ps2pdf.models.enums.ProcessType; // Local
...
Builder builder = <your mongo builder>
ClassModel<ProcessType> classModel = ClassModel.builder(ProcessType.class).build();
builder.register(classModel);
1

Nhập chế độ FullScreenen EXIT Mode FullScreen

Nếu chúng tôi sử dụng bộ giải mã enum mặc định được cung cấp bởi Mongo Java Driver, thì các giá trị của chúng tôi phải giống như tên trên Java Enum, quá kết hợp và nghiêm ngặt để chúng tôi viết mã dễ đọc hơn.
i.e.

Thực hiện

Nhập chế độ FullScreenen EXIT Mode FullScreen

Tạo và đăng ký một nhà cung cấp codec với Cơ quan đăng ký mã Mongo mà Mongo sử dụng để xác định bộ giải mã enum nào để sử dụng giá trị enum java

Với hướng dẫn dưới đây và việc sử dụng biến áp lớp để giải mã dữ liệu được gửi từ phụ trợ, bạn sẽ có thể ánh xạ liền mạch các lớp Java thành các lớp TypeScript (JS). i.e.

Chúng ta có thể lưu trữ enum trong MongoDB không?Create and register a codec provider with Mongo Code Registry which Mongo uses to determine which Enum decoder to use a Java Enum value. Create and register Enum decoder for ProcessType. Create and register Enum with DB.

Các bước: Tạo và đăng ký một nhà cung cấp Codec với Cơ quan đăng ký mã Mongo mà Mongo sử dụng để xác định bộ giải mã enum nào để sử dụng giá trị enum Java. Tạo và đăng ký Bộ giải mã Enum cho ProcessType. Tạo và đăng ký Enum với DB.Create and register a codec provider with Mongo Code Registry which Mongo uses to determine which Enum decoder to use a Java Enum value. Create and register Enum decoder for ProcessType. Create and register Enum with DB.

Các enum được lưu trữ trong cơ sở dữ liệu như thế nào?JPA maps its values into numbers using the ordinal() method. What it means is that without customizations JPA stores enum value as numbers.

Trước hết, để lưu các giá trị enum trong cơ sở dữ liệu quan hệ bằng JPA, bạn không phải làm bất cứ điều gì.Theo mặc định, khi một enum là một phần của một thực thể, JPA ánh xạ các giá trị của nó thành các số bằng phương thức Ordinal ().Điều đó có nghĩa là không có tùy chỉnh JPA lưu trữ giá trị enum dưới dạng số.JPA maps its values into numbers using the ordinal() method. What it means is that without customizations JPA stores enum value as numbers.

Enum trong lược đồ Mongoose là gì?creates a validator and checks if the value is given in an array. E.g: const userSchema = new mongoose. Schema({ userType: { type: String, enum : ['user','admin'], default: 'user' }, })

Việc sử dụng enum trong Mongoose là gì?

Chuỗi Mongoose và các loại số có Trình xác thực Enum.Trình xác nhận enum là một mảng sẽ kiểm tra xem giá trị được đưa ra có phải là một mục trong mảng không.Nếu giá trị không nằm trong mảng, Mongoose sẽ ném xác thực khi bạn cố gắng lưu ().an array that will check if the value given is an item in the array. If the value is not in the array, Mongoose will throw a ValidationError when you try to save() .an array that will check if the value given is an item in the array. If the value is not in the array, Mongoose will throw a ValidationError when you try to save() .