Search in sources :

Example 6 with ReplaceOneModel

use of com.mongodb.client.model.ReplaceOneModel in project core-ng-project by neowu.

the class MongoCollectionImpl method bulkReplace.

@Override
public void bulkReplace(List<T> entities) {
    StopWatch watch = new StopWatch();
    if (entities == null || entities.isEmpty())
        throw Exceptions.error("entities must not be empty");
    for (T entity : entities) {
        validator.validate(entity);
    }
    try {
        List<ReplaceOneModel<T>> models = new ArrayList<>(entities.size());
        for (T entity : entities) {
            Object id = mongo.codecs.id(entity);
            if (id == null)
                throw Exceptions.error("entity must have id, entityClass={}", entityClass.getCanonicalName());
            models.add(new ReplaceOneModel<>(Filters.eq("_id", id), entity, new UpdateOptions().upsert(true)));
        }
        collection().bulkWrite(models, new BulkWriteOptions().ordered(false));
    } finally {
        long elapsedTime = watch.elapsedTime();
        ActionLogContext.track("mongoDB", elapsedTime, 0, entities.size());
        logger.debug("bulkReplace, collection={}, size={}, elapsedTime={}", collectionName, entities.size(), elapsedTime);
        checkSlowOperation(elapsedTime);
    }
}
Also used : BulkWriteOptions(com.mongodb.client.model.BulkWriteOptions) ReplaceOneModel(com.mongodb.client.model.ReplaceOneModel) ArrayList(java.util.ArrayList) UpdateOptions(com.mongodb.client.model.UpdateOptions) StopWatch(core.framework.util.StopWatch)

Example 7 with ReplaceOneModel

use of com.mongodb.client.model.ReplaceOneModel in project mongo-java-driver by mongodb.

the class Operations method bulkWrite.

@SuppressWarnings("unchecked")
public MixedBulkWriteOperation bulkWrite(final List<? extends WriteModel<? extends TDocument>> requests, final BulkWriteOptions options) {
    notNull("requests", requests);
    List<WriteRequest> writeRequests = new ArrayList<>(requests.size());
    for (WriteModel<? extends TDocument> writeModel : requests) {
        WriteRequest writeRequest;
        if (writeModel == null) {
            throw new IllegalArgumentException("requests can not contain a null value");
        } else if (writeModel instanceof InsertOneModel) {
            TDocument document = ((InsertOneModel<TDocument>) writeModel).getDocument();
            if (getCodec() instanceof CollectibleCodec) {
                document = ((CollectibleCodec<TDocument>) getCodec()).generateIdIfAbsentFromDocument(document);
            }
            writeRequest = new InsertRequest(documentToBsonDocument(document));
        } else if (writeModel instanceof ReplaceOneModel) {
            ReplaceOneModel<TDocument> replaceOneModel = (ReplaceOneModel<TDocument>) writeModel;
            writeRequest = new UpdateRequest(toBsonDocument(replaceOneModel.getFilter()), documentToBsonDocument(replaceOneModel.getReplacement()), WriteRequest.Type.REPLACE).upsert(replaceOneModel.getReplaceOptions().isUpsert()).collation(replaceOneModel.getReplaceOptions().getCollation()).hint(replaceOneModel.getReplaceOptions().getHint()).hintString(replaceOneModel.getReplaceOptions().getHintString());
        } else if (writeModel instanceof UpdateOneModel) {
            UpdateOneModel<TDocument> updateOneModel = (UpdateOneModel<TDocument>) writeModel;
            BsonValue update = updateOneModel.getUpdate() != null ? toBsonDocument(updateOneModel.getUpdate()) : new BsonArray(toBsonDocumentList(updateOneModel.getUpdatePipeline()));
            writeRequest = new UpdateRequest(toBsonDocument(updateOneModel.getFilter()), update, WriteRequest.Type.UPDATE).multi(false).upsert(updateOneModel.getOptions().isUpsert()).collation(updateOneModel.getOptions().getCollation()).arrayFilters(toBsonDocumentList(updateOneModel.getOptions().getArrayFilters())).hint(updateOneModel.getOptions().getHint()).hintString(updateOneModel.getOptions().getHintString());
        } else if (writeModel instanceof UpdateManyModel) {
            UpdateManyModel<TDocument> updateManyModel = (UpdateManyModel<TDocument>) writeModel;
            BsonValue update = updateManyModel.getUpdate() != null ? toBsonDocument(updateManyModel.getUpdate()) : new BsonArray(toBsonDocumentList(updateManyModel.getUpdatePipeline()));
            writeRequest = new UpdateRequest(toBsonDocument(updateManyModel.getFilter()), update, WriteRequest.Type.UPDATE).multi(true).upsert(updateManyModel.getOptions().isUpsert()).collation(updateManyModel.getOptions().getCollation()).arrayFilters(toBsonDocumentList(updateManyModel.getOptions().getArrayFilters())).hint(updateManyModel.getOptions().getHint()).hintString(updateManyModel.getOptions().getHintString());
        } else if (writeModel instanceof DeleteOneModel) {
            DeleteOneModel<TDocument> deleteOneModel = (DeleteOneModel<TDocument>) writeModel;
            writeRequest = new DeleteRequest(toBsonDocument(deleteOneModel.getFilter())).multi(false).collation(deleteOneModel.getOptions().getCollation()).hint(deleteOneModel.getOptions().getHint()).hintString(deleteOneModel.getOptions().getHintString());
        } else if (writeModel instanceof DeleteManyModel) {
            DeleteManyModel<TDocument> deleteManyModel = (DeleteManyModel<TDocument>) writeModel;
            writeRequest = new DeleteRequest(toBsonDocument(deleteManyModel.getFilter())).multi(true).collation(deleteManyModel.getOptions().getCollation()).hint(deleteManyModel.getOptions().getHint()).hintString(deleteManyModel.getOptions().getHintString());
        } else {
            throw new UnsupportedOperationException(format("WriteModel of type %s is not supported", writeModel.getClass()));
        }
        writeRequests.add(writeRequest);
    }
    return new MixedBulkWriteOperation(namespace, writeRequests, options.isOrdered(), writeConcern, retryWrites).bypassDocumentValidation(options.getBypassDocumentValidation());
}
Also used : InsertOneModel(com.mongodb.client.model.InsertOneModel) CollectibleCodec(org.bson.codecs.CollectibleCodec) UpdateRequest(com.mongodb.internal.bulk.UpdateRequest) WriteRequest(com.mongodb.internal.bulk.WriteRequest) InsertRequest(com.mongodb.internal.bulk.InsertRequest) ReplaceOneModel(com.mongodb.client.model.ReplaceOneModel) ArrayList(java.util.ArrayList) DeleteOneModel(com.mongodb.client.model.DeleteOneModel) UpdateOneModel(com.mongodb.client.model.UpdateOneModel) BsonArray(org.bson.BsonArray) UpdateManyModel(com.mongodb.client.model.UpdateManyModel) DeleteRequest(com.mongodb.internal.bulk.DeleteRequest) BsonValue(org.bson.BsonValue) DeleteManyModel(com.mongodb.client.model.DeleteManyModel)

Example 8 with ReplaceOneModel

use of com.mongodb.client.model.ReplaceOneModel in project mongo-java-driver by mongodb.

the class UnifiedCrudHelper method toWriteModel.

private WriteModel<BsonDocument> toWriteModel(final BsonDocument document) {
    String requestType = document.getFirstKey();
    BsonDocument arguments = document.getDocument(requestType);
    switch(requestType) {
        case "insertOne":
            return new InsertOneModel<>(arguments.getDocument("document"));
        case "updateOne":
            return arguments.isArray("update") ? new UpdateOneModel<>(arguments.getDocument("filter"), arguments.getArray("update").stream().map(BsonValue::asDocument).collect(toList()), getUpdateOptions(arguments)) : new UpdateOneModel<>(arguments.getDocument("filter"), arguments.getDocument("update"), getUpdateOptions(arguments));
        case "updateMany":
            return arguments.isArray("update") ? new UpdateManyModel<>(arguments.getDocument("filter"), arguments.getArray("update").stream().map(BsonValue::asDocument).collect(toList()), getUpdateOptions(arguments)) : new UpdateManyModel<>(arguments.getDocument("filter"), arguments.getDocument("update"), getUpdateOptions(arguments));
        case "deleteOne":
            return new DeleteOneModel<>(arguments.getDocument("filter"), getDeleteOptions(arguments));
        case "deleteMany":
            return new DeleteManyModel<>(arguments.getDocument("filter"), getDeleteOptions(arguments));
        case "replaceOne":
            return new ReplaceOneModel<>(arguments.getDocument("filter"), arguments.getDocument("replacement"), getReplaceOptions(arguments));
        default:
            throw new UnsupportedOperationException("Unsupported write model type: " + requestType);
    }
}
Also used : InsertOneModel(com.mongodb.client.model.InsertOneModel) BsonDocument(org.bson.BsonDocument) ReplaceOneModel(com.mongodb.client.model.ReplaceOneModel) BsonString(org.bson.BsonString) DeleteOneModel(com.mongodb.client.model.DeleteOneModel) DeleteManyModel(com.mongodb.client.model.DeleteManyModel)

Example 9 with ReplaceOneModel

use of com.mongodb.client.model.ReplaceOneModel in project spring-data-mongodb by spring-projects.

the class DefaultBulkOperationsUnitTests method bulkReplaceOneShouldMapQueryCorrectly.

// DATAMONGO-2218
@Test
void bulkReplaceOneShouldMapQueryCorrectly() {
    SomeDomainType replacement = new SomeDomainType();
    replacement.firstName = "Minsu";
    replacement.lastName = "Kim";
    ops.replaceOne(query(where("firstName").is("danerys")), replacement).execute();
    verify(collection).bulkWrite(captor.capture(), any());
    ReplaceOneModel<Document> updateModel = (ReplaceOneModel<Document>) captor.getValue().get(0);
    assertThat(updateModel.getFilter()).isEqualTo(new Document("first_name", "danerys"));
    assertThat(updateModel.getReplacement().getString("first_name")).isEqualTo("Minsu");
    assertThat(updateModel.getReplacement().getString("lastName")).isEqualTo("Kim");
}
Also used : ReplaceOneModel(com.mongodb.client.model.ReplaceOneModel) Document(org.bson.Document) BsonDocument(org.bson.BsonDocument) Test(org.junit.jupiter.api.Test)

Aggregations

ReplaceOneModel (com.mongodb.client.model.ReplaceOneModel)9 DeleteOneModel (com.mongodb.client.model.DeleteOneModel)5 ArrayList (java.util.ArrayList)5 DeleteManyModel (com.mongodb.client.model.DeleteManyModel)4 InsertOneModel (com.mongodb.client.model.InsertOneModel)4 UpdateOneModel (com.mongodb.client.model.UpdateOneModel)4 BsonDocument (org.bson.BsonDocument)4 UpdateManyModel (com.mongodb.client.model.UpdateManyModel)3 BsonValue (org.bson.BsonValue)3 CollectibleCodec (org.bson.codecs.CollectibleCodec)3 BulkWriteResult (com.mongodb.bulk.BulkWriteResult)2 DeleteRequest (com.mongodb.bulk.DeleteRequest)2 InsertRequest (com.mongodb.bulk.InsertRequest)2 UpdateRequest (com.mongodb.bulk.UpdateRequest)2 WriteRequest (com.mongodb.bulk.WriteRequest)2 BulkWriteOptions (com.mongodb.client.model.BulkWriteOptions)2 UpdateOptions (com.mongodb.client.model.UpdateOptions)2 WriteModel (com.mongodb.client.model.WriteModel)2 MixedBulkWriteOperation (com.mongodb.operation.MixedBulkWriteOperation)2 List (java.util.List)2