Tìm thấy 2 giải pháp:
1. Một cách tiếp cận có phần có dây - bởi vì tôi kết thúc với mixed types
trong chuyên mục của tôi. Nói chung, bạn có thể không muốn các loại hỗn hợp vì làm tăng thêm độ phức tạp - và không có lý do chính đáng để chúng được coi là hỗn hợp trong trường hợp của tôi.
Về cơ bản thay vì một loại duy nhất , bạn có thể sử dụng danh sách các loại như vậy:
bsonType: "double"
so với bsonType: [ "double", "int" ]
.
Tính năng này được ghi lại tại đây: $ loại .
myValidatorIs =
{ validator:
{ $jsonSchema :
{ bsonType: "object"
, required: [ "price" ]
, properties:
{ price:
{ bsonType: [ "double", "int" ] // add "int" in this array here
, description: "must be a double/float and is required"
}
}
}
}
, validationAction: "error"
, validationLevel: "strict"
};
2. Cách tiếp cận được đề xuất , tìm thấy điều này với sự trợ giúp từ @lvrf
const MongoType_Double = require('mongodb').Double;
myValidatorIs =
{ validator:
{ $jsonSchema :
{ bsonType: "object"
, required: [ "price" ]
, properties:
{ price:
{ bsonType: "double" // leave this as double
, description: "must be a double/float and is required"
}
}
}
}
, validationAction: "error"
, validationLevel: "strict"
};
// then use the MongoType_Double constructor like so:
db.collection("collection").insertOne({ price : MongoType_Double(4.0) }); // no errors..
Điều này cũng sẽ hoạt động cho tất cả các loại khác như timestamp
và như vậy: