protected CreateCollectionOptions convertToCreateCollectionOptions(@Nullable CollectionOptions collectionOptions, Class<?> entityType) { CreateCollectionOptions result = new CreateCollectionOptions(); if (collectionOptions == null) { return result; } collectionOptions.getCapped().ifPresent(result::capped); collectionOptions.getSize().ifPresent(result::sizeInBytes); collectionOptions.getMaxDocuments().ifPresent(result::maxDocuments); collectionOptions.getCollation().map(Collation::toMongoCollation).ifPresent(result::collation); collectionOptions.getValidationOptions().ifPresent(it -> { ValidationOptions validationOptions = new ValidationOptions(); it.getValidationAction().ifPresent(validationOptions::validationAction); it.getValidationLevel().ifPresent(validationOptions::validationLevel); it.getValidator().ifPresent(val -> validationOptions.validator(getMappedValidator(val, entityType))); result.validationOptions(validationOptions); }); return result; }
private MongoDatabase addValidation(final Document validator, final String collectionName) { ValidationOptions options = new ValidationOptions() .validator(validator) .validationLevel(ValidationLevel.MODERATE) .validationAction(ValidationAction.ERROR); MongoDatabase database = getMongoClient().getDatabase(TEST_DB_NAME); database.getCollection(collectionName).drop(); database.createCollection(collectionName, new CreateCollectionOptions().validationOptions(options)); return database; }
void process(final MappedClass mc, final Validation validation) { if (validation != null) { String collectionName = mc.getCollectionName(); CommandResult result = getDB() .command(new BasicDBObject("collMod", collectionName) .append("validator", parse(validation.value())) .append("validationLevel", validation.level().getValue()) .append("validationAction", validation.action().getValue()) ); if (!result.ok()) { if (result.getInt("code") == 26) { ValidationOptions options = new ValidationOptions() .validator(parse(validation.value())) .validationLevel(validation.level()) .validationAction(validation.action()); getDatabase().createCollection(collectionName, new CreateCollectionOptions().validationOptions(options)); } else { result.throwOnError(); } } } }
@Test public void testBypassDocumentValidation() { checkMinServerVersion(3.2); getDs().save(asList(new User("john doe", new Date()), new User("John Doe", new Date()))); MongoDatabase database = getMongoClient().getDatabase(TEST_DB_NAME); database.getCollection("out_users").drop(); database.createCollection("out_users", new CreateCollectionOptions() .validationOptions(new ValidationOptions() .validator(Document.parse("{ \"age\" : { \"gte\" : 13 } }")))); try { getDs() .createAggregation(User.class) .match(getDs().find(User.class).field("name").equal("john doe")) .out("out_users", User.class); fail("Document validation should have complained."); } catch (MongoCommandException e) { // expected } getDs() .createAggregation(User.class) .match(getDs().find(User.class).field("name").equal("john doe")) .out("out_users", User.class, builder() .bypassDocumentValidation(true) .build()); Assert.assertEquals(1, getAds().find("out_users", User.class).count()); }
MongoDatabase database = getMongoClient().getDatabase(TEST_DB_NAME); database.getCollection("counts").drop(); database.createCollection("counts", new CreateCollectionOptions().validationOptions(validationOptions));
protected CreateCollectionOptions convertToCreateCollectionOptions(@Nullable CollectionOptions collectionOptions, Class<?> entityType) { CreateCollectionOptions result = new CreateCollectionOptions(); if (collectionOptions == null) { return result; } collectionOptions.getCapped().ifPresent(result::capped); collectionOptions.getSize().ifPresent(result::sizeInBytes); collectionOptions.getMaxDocuments().ifPresent(result::maxDocuments); collectionOptions.getCollation().map(Collation::toMongoCollation).ifPresent(result::collation); collectionOptions.getValidationOptions().ifPresent(it -> { ValidationOptions validationOptions = new ValidationOptions(); it.getValidationAction().ifPresent(validationOptions::validationAction); it.getValidationLevel().ifPresent(validationOptions::validationLevel); it.getValidator().ifPresent(val -> validationOptions.validator(getMappedValidator(val, entityType))); result.validationOptions(validationOptions); }); return result; }
void process(final MappedClass mc, final Validation validation) { if (validation != null) { String collectionName = mc.getCollectionName(); CommandResult result = getDB() .command(new BasicDBObject("collMod", collectionName) .append("validator", parse(validation.value())) .append("validationLevel", validation.level().getValue()) .append("validationAction", validation.action().getValue()) ); if (!result.ok()) { if (result.getInt("code") == 26) { ValidationOptions options = new ValidationOptions() .validator(parse(validation.value())) .validationLevel(validation.level()) .validationAction(validation.action()); getDatabase().createCollection(collectionName, new CreateCollectionOptions().validationOptions(options)); } else { result.throwOnError(); } } } }