/** * Create a copy of the options instance. * * @return the copy */ public UpdateOptions copy() { return new UpdateOptions() .bypassDocumentValidation(getBypassDocumentValidation()) .collation(getCollation()) .multi(isMulti()) .upsert(isUpsert()) .writeConcern(getWriteConcern()); }
<T> UpdateOptions enforceWriteConcern(final UpdateOptions options, final Class<T> klass) { if (options.getWriteConcern() == null) { return options .copy() .writeConcern(getWriteConcern(klass)); } return options; }
@Override @Deprecated public <T> UpdateResults update(final Query<T> query, final UpdateOperations<T> operations, final boolean createIfMissing, final WriteConcern wc) { return update(query, operations, new UpdateOptions() .upsert(createIfMissing) .multi(true) .writeConcern(wc)); }
@Override @Deprecated public <T> UpdateResults updateFirst(final Query<T> query, final UpdateOperations<T> operations, final boolean createIfMissing) { return update(query, operations, new UpdateOptions() .upsert(createIfMissing)); }
@Override @Deprecated public <T> UpdateResults updateFirst(final Query<T> query, final UpdateOperations<T> operations, final boolean createIfMissing, final WriteConcern wc) { return update(query, operations, new UpdateOptions() .upsert(createIfMissing) .writeConcern(wc)); }
@Test public void testRemoveFirst() { final ContainsIntArray cIntArray = new ContainsIntArray(); getDs().save(cIntArray); ContainsIntArray cIALoaded = getDs().get(cIntArray); assertThat(cIALoaded.values.length, is(3)); assertThat(cIALoaded.values, is((new ContainsIntArray()).values)); assertUpdated(getDs().update(getDs().find(ContainsIntArray.class), getDs().createUpdateOperations(ContainsIntArray.class) .removeFirst("values"), new UpdateOptions() .multi(false)), 1); assertThat(getDs().get(cIntArray).values, is(new Integer[]{2, 3})); assertUpdated(getDs().update(getDs().find(ContainsIntArray.class), getDs().createUpdateOperations(ContainsIntArray.class) .removeLast("values"), new UpdateOptions() .multi(false)), 1); assertThat(getDs().get(cIntArray).values, is(new Integer[]{2})); }
@Override @Deprecated public <T> UpdateResults updateFirst(final Query<T> query, final UpdateOperations<T> operations) { return update(query, operations, new UpdateOptions()); }
.enableValidation() .filter(versionKeyName, oldVersion); final UpdateResults res = update(query, dbObj, new UpdateOptions() .bypassDocumentValidation(options.getBypassDocumentValidation()) .writeConcern(options.getWriteConcern()));
@Test @SuppressWarnings("deprecation") public void testEnforceWriteConcern() { DatastoreImpl ds = (DatastoreImpl) getDs(); FindAndModifyOptions findAndModifyOptions = new FindAndModifyOptions(); assertNull(findAndModifyOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(findAndModifyOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(findAndModifyOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); InsertOptions insertOptions = new InsertOptions(); assertNull(insertOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(insertOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(insertOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); UpdateOptions updateOptions = new UpdateOptions(); assertNull(updateOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(updateOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(updateOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); DeleteOptions deleteOptions = new DeleteOptions(); assertNull(deleteOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(deleteOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(deleteOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); }
.loginCount); results = getDs().update(query, updateOperations, new UpdateOptions() .multi(true) .collation(Collation.builder() .locale("en") .collationStrength(CollationStrength.SECONDARY)
wr = update(query, new BasicDBObject("$set", dbObj), new UpdateOptions().writeConcern(wc)).getWriteResult();
@SuppressWarnings("deprecation") private void ensureEntityWriteConcern() { DatastoreImpl datastore = (DatastoreImpl) getAds(); assertEquals(ACKNOWLEDGED, datastore.enforceWriteConcern(new InsertOptions(), Simple.class) .getWriteConcern()); assertEquals(ACKNOWLEDGED, datastore.enforceWriteConcern(new UpdateOptions(), Simple.class) .getWriteConcern()); assertEquals(ACKNOWLEDGED, datastore.enforceWriteConcern(new FindAndModifyOptions(), Simple.class) .getWriteConcern()); }
@Test public void update() { getMorphia().map(DocumentValidation.class); getDs().enableDocumentValidation(); getDs().save(new DocumentValidation("Harold", 100, new Date())); Query<DocumentValidation> query = getDs().find(DocumentValidation.class); UpdateOperations<DocumentValidation> updates = getDs().createUpdateOperations(DocumentValidation.class) .set("number", 5); UpdateOptions options = new UpdateOptions() .bypassDocumentValidation(false); try { getDs().update(query, updates, options); fail("Document validation should have complained"); } catch (WriteConcernException e) { // expected } options.bypassDocumentValidation(true); getDs().update(query, updates, options); Assert.assertNotNull(query.field("number").equal(5) .find(new FindOptions().limit(1)) .tryNext()); }
@Test public void testSetOnInsertWhenInserting() { checkMinServerVersion(2.4); ObjectId id = new ObjectId(); assertInserted(getDs().update(getDs().find(Circle.class).field("id").equal(id), getDs().createUpdateOperations(Circle.class).setOnInsert("radius", 2D), new UpdateOptions() .upsert(true))); final Circle updatedCircle = getDs().get(Circle.class, id); assertThat(updatedCircle, is(notNullValue())); assertThat(updatedCircle.getRadius(), is(2D)); }
@Override @Deprecated public <T> UpdateResults update(final Query<T> query, final UpdateOperations<T> operations, final boolean createIfMissing) { return update(query, operations, new UpdateOptions() .upsert(createIfMissing) .writeConcern(getWriteConcern(query.getEntityClass()))); }
@Override public <T> UpdateResults update(final Query<T> query, final UpdateOperations<T> operations) { return update(query, operations, new UpdateOptions() .upsert(false) .multi(true) .writeConcern(getWriteConcern(query.getEntityClass()))); }
getDs().createUpdateOperations(ContainsIntArray.class) .push("values", 4), new UpdateOptions() .multi(false)); getDs().createUpdateOperations(ContainsIntArray.class) .push("values", 4), new UpdateOptions() .multi(false)); getDs().createUpdateOperations(ContainsIntArray.class) .push("values", asList(5, 6)), new UpdateOptions() .multi(false)); getDs().createUpdateOperations(ContainsIntArray.class) .push("values", 12, options().position(2)), new UpdateOptions() .multi(false)); getDs().createUpdateOperations(ContainsIntArray.class) .push("values", asList(99, 98, 97), options().position(4)), new UpdateOptions() .multi(false));
@Override public UpdateResults updateFirst(final Query<T> query, final UpdateOperations<T> ops) { return ds.update(query, ops, new UpdateOptions()); }
@Test public void testMinUsesSuppliedValueWhenThisIsSmallerThanCurrentDocumentValue() { checkMinServerVersion(2.6); final ObjectId id = new ObjectId(); final double newLowerValue = 2D; assertInserted(getDs().update(getDs().find(Circle.class).field("id").equal(id), getDs().createUpdateOperations(Circle.class).setOnInsert("radius", 3D), new UpdateOptions().upsert(true))); assertUpdated(getDs().update(getDs().find(Circle.class).field("id").equal(id), getDs().createUpdateOperations(Circle.class).min("radius", newLowerValue), new UpdateOptions().upsert(true)), 1); final Circle updatedCircle = getDs().get(Circle.class, id); assertThat(updatedCircle, is(notNullValue())); assertThat(updatedCircle.getRadius(), is(newLowerValue)); }
@Override @Deprecated public <T> UpdateResults updateFirst(final Query<T> query, final T entity, final boolean createIfMissing) { if (getMapper().getMappedClass(entity).getMappedVersionField() != null) { throw new UnsupportedOperationException("updateFirst() is not supported with versioned entities"); } final LinkedHashMap<Object, DBObject> involvedObjects = new LinkedHashMap<Object, DBObject>(); final DBObject dbObj = mapper.toDBObject(entity, involvedObjects); final UpdateResults res = update(query, dbObj, new UpdateOptions() .upsert(createIfMissing) .writeConcern(getWriteConcern(entity))); // update _id field if (res.getInsertedCount() > 0) { dbObj.put("_id", res.getNewId()); } postSaveOperations(singletonList(entity), involvedObjects, false, getCollection(entity).getName()); return res; }