{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 test1
và test2
. Đ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.