public BulkWriteResult remove(List<? extends Bson> queryList, boolean multi) { List<WriteModel<Document>> actions = new ArrayList<>(queryList.size()); if (multi) { for (Bson document : queryList) { actions.add(new DeleteManyModel<>(document)); } } else { for (Bson document : queryList) { actions.add(new DeleteOneModel<>(document)); } } return dbCollection.bulkWrite(actions, new BulkWriteOptions().ordered(false)); }
public BulkWriteResult replace(List<? extends Bson> queries, List<? extends Bson> updates, boolean upsert) { if (queries.size() != updates.size()) { throw wrongQueryUpdateSize(queries, updates); } Iterator<? extends Bson> queryIterator = queries.iterator(); Iterator<? extends Bson> updateIterator = updates.iterator(); List<WriteModel<Document>> actions = new ArrayList<>(queries.size()); UpdateOptions updateOptions = new UpdateOptions().upsert(upsert); while (queryIterator.hasNext()) { Bson query = queryIterator.next(); Bson update = updateIterator.next(); actions.add(new ReplaceOneModel<>(query, (Document) update, updateOptions)); } return dbCollection.bulkWrite(actions, new BulkWriteOptions().ordered(false)); }
@Override public void storeAll(Map<String, Supplement> map) { List<InsertOneModel> batch = new LinkedList<InsertOneModel>(); for (Map.Entry<String, Supplement> entry : map.entrySet()) { String key = entry.getKey(); Supplement value = entry.getValue(); batch.add(new InsertOneModel( new Document("name", value.getName()).append("price", value.getPrice()) .append("_id", key))); } this.collection.bulkWrite(batch, new BulkWriteOptions().ordered(false)); }
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); }
BulkWriteOptions bulkWriteOptions = new BulkWriteOptions(); bulkWriteOptions.ordered(true); BulkWriteResult bulkWriteResult = null; try { bulkWriteResult = mongoCollection.bulkWrite(updateDocuments, bulkWriteOptions); } catch (BulkWriteException e) { List<BulkWriteError> bulkWriteErrors = e.getWriteErrors(); for (BulkWriteError bulkWriteError : bulkWriteErrors) { int failedIndex = bulkWriteError.getIndex(); Long failedEntity = entityList.get(failedIndex); System.out.println("Failed record: " + failedEntity); //handle rollback } }
opts.ordered(true);
private Function<Exchange, Object> createDoBulkWrite() { return exchange -> { try { MongoCollection<BasicDBObject> dbCol = calculateCollection(exchange); Boolean ordered = exchange.getIn().getHeader(MongoDbConstants.BULK_ORDERED, Boolean.TRUE, Boolean.class); BulkWriteOptions options = new BulkWriteOptions().ordered(ordered); @SuppressWarnings("unchecked") List<WriteModel<BasicDBObject>> requests = exchange.getIn().getMandatoryBody((Class<List<WriteModel<BasicDBObject>>>)(Class<?>)List.class); BulkWriteResult result = dbCol.bulkWrite(requests, options); return result; } catch (InvalidPayloadException e) { throw new CamelMongoDbException("Invalid payload for bulk write", e); } }; }
private void removeInBulk(boolean ordered) { DeleteManyModel<Document> deleteOp = new DeleteManyModel<>(json("field: 'y'")); BulkWriteResult result = collection.bulkWrite(Collections.singletonList(deleteOp), new BulkWriteOptions().ordered(ordered)); assertThat(result.getDeletedCount()).isEqualTo(3); assertThat(collection.countDocuments()).isZero(); }
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); }
private BulkWriteResult commitWrite(List<WriteModel<? extends Document>> lst) { BulkWriteOptions bulkWriteOptions = new BulkWriteOptions(); bulkWriteOptions.ordered(ordered); return driver.getCollection(driver.getDb(db), collection, ReadPreference.nearest(), wc).bulkWrite(lst, bulkWriteOptions); } }
private Publisher<BulkWriteResult> updatePolicy(final Thing thing, final PolicyUpdate policyUpdate) { final Bson filter = filterWithEqualThingId(getThingId(thing)); final List<UpdateOneModel<Document>> writeThingIndexModels = createThingIndexModels(filter, policyUpdate); final BulkWriteOptions writeOrdered = new BulkWriteOptions(); writeOrdered.ordered(true); return collection.bulkWrite(writeThingIndexModels, writeOrdered); }
private Publisher<BulkWriteResult> updatePolicy(final Thing thing, final PolicyUpdate policyUpdate) { final Bson filter = filterWithEqualThingId(getThingId(thing)); final List<UpdateOneModel<Document>> writeThingIndexModels = createThingIndexModels(filter, policyUpdate); final BulkWriteOptions writeOrdered = new BulkWriteOptions(); writeOrdered.ordered(true); return collection.bulkWrite(writeThingIndexModels, writeOrdered); }
/** * This method insert a list of documents into a collection. Params w and wtimeout are read from QueryOptions. * * @param documentList The new list of documents to be inserted * @param options Some options like timeout * @return A BulkWriteResult from MongoDB API */ public BulkWriteResult insert(List<Document> documentList, QueryOptions options) { List<WriteModel<Document>> actions = new ArrayList<>(documentList.size()); for (Document document : documentList) { actions.add(new InsertOneModel<>(document)); } int writeConcern = 1; int ms = 0; if (options != null && (options.containsKey("w") || options.containsKey("wtimeout"))) { writeConcern = options.getInt("w", 1); ms = options.getInt("wtimeout", 0); } dbCollection.withWriteConcern(new WriteConcern(writeConcern, ms)); return dbCollection.bulkWrite(actions, new BulkWriteOptions().ordered(false)); }
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 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); } }; }
@Override public Source<Optional<Throwable>, NotUsed> purge(final MongoNamespaceSelection selection) { final MongoCollection<Document> collection = db.getCollection(selection.getCollectionName()); if (selection.isEntireCollection()) { return Source.fromPublisher(collection.drop()) .map(success -> Optional.empty()); } else { // https://stackoverflow.com/a/33164008 // claims unordered bulk ops halve MongoDB load final List<WriteModel<Document>> writeModel = Collections.singletonList(new DeleteManyModel<>(selection.getFilter())); final BulkWriteOptions options = new BulkWriteOptions().ordered(false); return Source.fromPublisher(collection.bulkWrite(writeModel, options)) .map(result -> Optional.<Throwable>empty()) .recover(Match.<Throwable, Optional<Throwable>>matchAny(Optional::of).build()); } }
private Function<BulkWriteResult, Source<Boolean, NotUsed>> mapPolicyUpdateResult(final PolicyUpdate policyUpdate) { final BulkWriteOptions writeOrdered = new BulkWriteOptions(); writeOrdered.ordered(true); return result -> { if (result.getMatchedCount() > 0) { final List<WriteModel<Document>> writePolicyIndexModels = createPolicyIndexModels(policyUpdate.getPolicyIndexRemoveFilter(), policyUpdate.getPolicyIndexInsertEntries()); return Source.fromPublisher( policiesCollection.bulkWrite(writePolicyIndexModels, writeOrdered)) .map(result2 -> Boolean.TRUE); } else { return Source.single(Boolean.FALSE); } }; }
private Function<BulkWriteResult, Source<Boolean, NotUsed>> mapPolicyUpdateResult(final PolicyUpdate policyUpdate) { final BulkWriteOptions writeOrdered = new BulkWriteOptions(); writeOrdered.ordered(true); return result -> { if (result.getMatchedCount() > 0) { final List<WriteModel<Document>> writePolicyIndexModels = createPolicyIndexModels(policyUpdate.getPolicyIndexRemoveFilter(), policyUpdate.getPolicyIndexInsertEntries()); return Source.fromPublisher( policiesCollection.bulkWrite(writePolicyIndexModels, writeOrdered)) .map(result2 -> Boolean.TRUE); } else { return Source.single(Boolean.FALSE); } }; }