return false; if (insertedCount != that.getInsertedCount()) { return false;
private WriteConcernResult translateBulkWriteResult(final WriteRequest.Type type, final BulkWriteResult writeResult) { switch (type) { case INSERT: return WriteConcernResult.acknowledged(writeResult.getInsertedCount(), false, null); case DELETE: return WriteConcernResult.acknowledged(writeResult.getDeletedCount(), false, null); case UPDATE: case REPLACE: return WriteConcernResult.acknowledged(writeResult.getMatchedCount() + writeResult.getUpserts().size(), writeResult.getMatchedCount() > 0, writeResult.getUpserts().isEmpty() ? null : writeResult.getUpserts().get(0).getId()); default: throw new MongoInternalException("Unhandled write request type: " + type); } }
/** * Add a result * * @param result the result * @param indexMap the index map */ public void addResult(final BulkWriteResult result, final IndexMap indexMap) { insertedCount += result.getInsertedCount(); matchedCount += result.getMatchedCount(); deletedCount += result.getDeletedCount(); if (result.isModifiedCountAvailable() && modifiedCount != null) { modifiedCount += result.getModifiedCount(); } else { modifiedCount = null; } mergeUpserts(result.getUpserts(), indexMap); }
static BulkWriteResult translateBulkWriteResult(final com.mongodb.bulk.BulkWriteResult bulkWriteResult, final Decoder<DBObject> decoder) { if (bulkWriteResult.wasAcknowledged()) { Integer modifiedCount = (bulkWriteResult.isModifiedCountAvailable()) ? bulkWriteResult.getModifiedCount() : null; return new AcknowledgedBulkWriteResult(bulkWriteResult.getInsertedCount(), bulkWriteResult.getMatchedCount(), bulkWriteResult.getDeletedCount(), modifiedCount, translateBulkWriteUpserts(bulkWriteResult.getUpserts(), decoder)); } else { return new UnacknowledgedBulkWriteResult(); } }
@Test public void testBulkInsert() throws Exception { List<WriteModel<Document>> inserts = new ArrayList<>(); inserts.add(new InsertOneModel<>(json("_id: 1"))); inserts.add(new InsertOneModel<>(json("_id: 2"))); inserts.add(new InsertOneModel<>(json("_id: 3"))); BulkWriteResult result = collection.bulkWrite(inserts); assertThat(result.getInsertedCount()).isEqualTo(3); }
private void insertUpdateInBulkNoMatch(boolean ordered) { collection.insertOne(json("foo: 'bar'")); List<WriteModel<Document>> ops = new ArrayList<>(); ops.add(new UpdateOneModel<Document>(ne("foo", "bar"), set("field", "y"))); BulkWriteResult result = collection.bulkWrite(ops, new BulkWriteOptions().ordered(ordered)); assertThat(result.getInsertedCount()).isEqualTo(0); assertThat(result.getDeletedCount()).isEqualTo(0); assertThat(result.getModifiedCount()).isEqualTo(0); assertThat(result.getMatchedCount()).isEqualTo(0); }
@Override public boolean write(List<Document> batch) { BulkWriteResult result = collection.insert(batch, QueryOptions.empty()).first(); insertedCount += result.getInsertedCount(); return true; }
private void insertUpdateInBulk(boolean ordered) { List<WriteModel<Document>> ops = new ArrayList<>(); ops.add(new InsertOneModel<>(json("_id: 1, field: 'x'"))); ops.add(new InsertOneModel<>(json("_id: 2, field: 'x'"))); ops.add(new InsertOneModel<>(json("_id: 3, field: 'x'"))); ops.add(new UpdateManyModel<Document>(json("field: 'x'"), set("field", "y"))); BulkWriteResult result = collection.bulkWrite(ops, new BulkWriteOptions().ordered(ordered)); assertThat(result.getInsertedCount()).isEqualTo(3); assertThat(result.getDeletedCount()).isEqualTo(0); assertThat(result.getModifiedCount()).isEqualTo(3); assertThat(result.getMatchedCount()).isEqualTo(3); long totalDocuments = collection.countDocuments(); assertThat(totalDocuments).isEqualTo(3); long documentsWithY = collection.countDocuments(json("field: 'y'")); assertThat(documentsWithY).isEqualTo(3); }
public <T extends Document> void bulkUpsertSessions(Collection<SessionEvent> events) { final BulkWriteResult res = sessions().bulkWrite(events.stream().map(event -> { if (event instanceof DeleteSessionEvent) { return new DeleteOneModel<T>(new Document("_id", event.getSessionId())); } else if (event instanceof UpdateSessionEvent) { return new UpdateOneModel<T>( new Document("_id", event.getSessionId()).append("object.sessionId", event.getSessionId()), new Document("$set", new Document("object.$.timestamp", event.getTimestamp())) ); } else { return new UpdateOneModel<T>( new Document("_id", event.getSessionId()), new Document("$set", new Document("object", serializer.toDBObject(event).get(OBJECT_FIELD))), new UpdateOptions().upsert(true) ); } }).collect(toList())); LOGGER.info("Sessions update in bulk results: {} created, {} updated, {} deleted, {} upserted", res.getInsertedCount(), res.getModifiedCount(), res.getDeletedCount(), res.getUpserts().size()); }
return false; if (insertedCount != that.getInsertedCount()) { return false;
private WriteConcernResult translateBulkWriteResult(final WriteRequest.Type type, final BulkWriteResult writeResult) { switch (type) { case INSERT: return WriteConcernResult.acknowledged(writeResult.getInsertedCount(), false, null); case DELETE: return WriteConcernResult.acknowledged(writeResult.getDeletedCount(), false, null); case UPDATE: case REPLACE: return WriteConcernResult.acknowledged(writeResult.getMatchedCount() + writeResult.getUpserts().size(), writeResult.getMatchedCount() > 0, writeResult.getUpserts().isEmpty() ? null : writeResult.getUpserts().get(0).getId()); default: throw new MongoInternalException("Unhandled write request type: " + type); } }
return result.first().getInsertedCount(); } catch (BsonSerializationException e) {
return result.first().getInsertedCount(); } catch (BsonSerializationException e) {
private WriteConcernResult translateBulkWriteResult(final WriteRequest.Type type, final BulkWriteResult writeResult) { switch (type) { case INSERT: return WriteConcernResult.acknowledged(writeResult.getInsertedCount(), false, null); case DELETE: return WriteConcernResult.acknowledged(writeResult.getDeletedCount(), false, null); case UPDATE: case REPLACE: return WriteConcernResult.acknowledged(writeResult.getMatchedCount() + writeResult.getUpserts().size(), writeResult.getMatchedCount() > 0, writeResult.getUpserts().isEmpty() ? null : writeResult.getUpserts().get(0).getId()); default: throw new MongoInternalException("Unhandled write request type: " + type); } }
private Function<BulkWriteResult, Source<Boolean, NotUsed>> mapCombinedWritesResult( final List<WriteModel<Document>> policyWriteModels) { final BulkWriteOptions writeOrdered = new BulkWriteOptions(); writeOrdered.ordered(true); return bulkWriteResult -> { if (bulkWriteResult.getModifiedCount() > 0 || bulkWriteResult.getInsertedCount() > 0) { if (!policyWriteModels.isEmpty()) { return Source.fromPublisher(policiesCollection.bulkWrite(policyWriteModels, writeOrdered)) .map(policiesWriteResult -> Boolean.TRUE); } else { return Source.single(Boolean.TRUE); } } else { // return false if the previous bulk write did not modify anything return Source.single(Boolean.FALSE); } }; }
/** * Add a result * * @param result the result * @param indexMap the index map */ public void addResult(final BulkWriteResult result, final IndexMap indexMap) { insertedCount += result.getInsertedCount(); matchedCount += result.getMatchedCount(); deletedCount += result.getDeletedCount(); if (result.isModifiedCountAvailable() && modifiedCount != null) { modifiedCount += result.getModifiedCount(); } else { modifiedCount = null; } mergeUpserts(result.getUpserts(), indexMap); }
private Function<BulkWriteResult, Source<Boolean, NotUsed>> mapCombinedWritesResult( final List<WriteModel<Document>> policyWriteModels) { final BulkWriteOptions writeOrdered = new BulkWriteOptions(); writeOrdered.ordered(true); return bulkWriteResult -> { if (bulkWriteResult.getModifiedCount() > 0 || bulkWriteResult.getInsertedCount() > 0) { if (!policyWriteModels.isEmpty()) { return Source.fromPublisher(policiesCollection.bulkWrite(policyWriteModels, writeOrdered)) .map(policiesWriteResult -> Boolean.TRUE); } else { return Source.single(Boolean.TRUE); } } else { // return false if the previous bulk write did not modify anything return Source.single(Boolean.FALSE); } }; }
private static int doInsert(final MongoDBQueryDescriptor queryDesc, final MongoCollection<Document> collection) { Document options = queryDesc.getOptions(); Boolean ordered = FALSE; WriteConcern wc = null; if ( options != null ) { ordered = (Boolean) options.get( "ordered" ); ordered = ( ordered != null ) ? ordered : FALSE; Document o = (Document) options.get( "writeConcern" ); wc = getWriteConcern( o ); } // Need to use BulkWriteOperation here rather than collection.insert(..) because the WriteResult returned // by the latter returns 0 for getN() even if the insert was successful (which is bizarre, but that's the way it // is defined...) List<InsertOneModel<Document>> operationList = null; if ( queryDesc.getUpdateOrInsertMany() != null ) { operationList = new ArrayList<>( queryDesc.getUpdateOrInsertMany().size() ); for ( Document doc : queryDesc.getUpdateOrInsertMany() ) { operationList.add( new InsertOneModel<>( doc ) ); } } else { operationList = new ArrayList<>( 1 ); operationList.add( new InsertOneModel<>( queryDesc.getUpdateOrInsertOne() ) ); } final BulkWriteResult result = collection.withWriteConcern( ( wc != null ? wc : collection.getWriteConcern() ) ).bulkWrite( operationList, new BulkWriteOptions().ordered( ordered ) ); if ( result.wasAcknowledged() ) { return result.getInsertedCount(); } return -1; // Not sure if we should throw an exception instead? }
private static int doInsert(final MongoDBQueryDescriptor queryDesc, final MongoCollection<Document> collection) { Document options = queryDesc.getOptions(); Boolean ordered = FALSE; WriteConcern wc = null; if ( options != null ) { ordered = (Boolean) options.get( "ordered" ); ordered = ( ordered != null ) ? ordered : FALSE; Document o = (Document) options.get( "writeConcern" ); wc = getWriteConcern( o ); } // Need to use BulkWriteOperation here rather than collection.insert(..) because the WriteResult returned // by the latter returns 0 for getN() even if the insert was successful (which is bizarre, but that's the way it // is defined...) List<InsertOneModel<Document>> operationList = null; if ( queryDesc.getUpdateOrInsertMany() != null ) { operationList = new ArrayList<>( queryDesc.getUpdateOrInsertMany().size() ); for ( Document doc : queryDesc.getUpdateOrInsertMany() ) { operationList.add( new InsertOneModel<>( doc ) ); } } else { operationList = new ArrayList<>( 1 ); operationList.add( new InsertOneModel<>( queryDesc.getUpdateOrInsertOne() ) ); } final BulkWriteResult result = collection.withWriteConcern( ( wc != null ? wc : collection.getWriteConcern() ) ).bulkWrite( operationList, new BulkWriteOptions().ordered( ordered ) ); if ( result.wasAcknowledged() ) { return result.getInsertedCount(); } return -1; // Not sure if we should throw an exception instead? }
static BulkWriteResult translateBulkWriteResult(final com.mongodb.bulk.BulkWriteResult bulkWriteResult, final Decoder<DBObject> decoder) { if (bulkWriteResult.wasAcknowledged()) { Integer modifiedCount = (bulkWriteResult.isModifiedCountAvailable()) ? bulkWriteResult.getModifiedCount() : null; return new AcknowledgedBulkWriteResult(bulkWriteResult.getInsertedCount(), bulkWriteResult.getMatchedCount(), bulkWriteResult.getDeletedCount(), modifiedCount, translateBulkWriteUpserts(bulkWriteResult.getUpserts(), decoder)); } else { return new UnacknowledgedBulkWriteResult(); } }