MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongo Json Schema Validator AnyOf không hoạt động

{test:"123"} không xác thực được vì nó không tuân theo bất kỳ lược đồ nào trong anyOf , cần test1 hoặc test2 là chìa khóa duy nhất.

anyOf áp dụng mỗi cụm từ con vào trường hợp của bạn và xác nhận hợp lệ nếu ít nhất một trong các cụm con vượt qua quá trình xác thực.

{test1: "123" } không thành công vì lược đồ gốc additionalProperties: false ngăn bất kỳ khóa nào trong đối tượng của bạn không được xác định trong đối tượng lược đồ CÙNG properties hoặc patternProperties .

Giải pháp là có một số trùng lặp.

In THIS ví dụ (liên kết dành cho thử nghiệm trình duyệt nhưng chỉ dành cho bản nháp-7), tôi đã thêm thuộc tính gốc test1test2 . Điều này sẽ cho phép dữ liệu mà bạn có khóa test1 hoặc test2 để vượt qua, nhưng tôi không biết yêu cầu của bạn, tôi không thể cho bạn biết cách sửa đổi lược đồ để cho phép một đối tượng có khóa test để vượt qua (như mỗi anyOf các cụm con ngăn chặn điều đó).

{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "_id": {},
    "test": {},
    "test1": {},
    "test2": {}
  },
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "test1": {}
      },
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "test2": {}
      },
      "additionalProperties": false
    }
  ]
}

Nếu mục đích của bạn là kiểm tra xem một trong những thứ bạn đang chèn có test1 hay không hoặc test2 , thì tôi e rằng JSON Schema không thể giúp bạn. Lược đồ JSON trong ngữ cảnh Mongo chỉ có thể kiểm tra từng mục riêng lẻ và không có khả năng xác thực một bộ sưu tập các bản ghi có khả năng được chèn vào.

Trong lược đồ ví dụ trên, tôi đã xóa kiểm tra kiểu vì điều đó không liên quan đến câu hỏi này và bsonType vẫn khác với kiểu lược đồ JSON.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm kiếm vị trí với API Google Maps dành cho Android

  2. mongo shell script sẽ không cho phép tôi sử dụng <database>

  3. Truy vấn với các phép nối và bộ lọc trong Mongoose

  4. Cách trả lại dữ liệu từ MongoDB

  5. Làm cách nào để tạo $ hoặc truy vấn cho MongoDB bằng trình điều khiển Java?