@Override @Deprecated public <T> UpdateResults updateFirst(final Query<T> query, final UpdateOperations<T> operations) { return update(query, operations, new UpdateOptions()); }
@Override public UpdateResults updateFirst(final Query<T> query, final UpdateOperations<T> ops) { return ds.update(query, ops, new UpdateOptions()); }
@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)); }
@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 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()))); }
@Override @SuppressWarnings("unchecked") public <T> UpdateResults update(final Key<T> key, final UpdateOperations<T> operations) { Class<T> clazz = (Class<T>) key.getType(); if (clazz == null) { clazz = (Class<T>) mapper.getClassFromCollection(key.getCollection()); } return update(createQuery(clazz).disableValidation().filter("_id", key.getId()), operations, new UpdateOptions()); }
/** * 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()); }
@SuppressWarnings("deprecation") private void doUpdates(final ContainsIntArray updated, final ContainsIntArray control, final Query<ContainsIntArray> query, final UpdateOperations<ContainsIntArray> operations, final Integer[] target) { assertUpdated(getDs().updateFirst(query, operations), 1); assertThat(getDs().get(updated).values, is(target)); assertThat(getDs().get(control).values, is(new Integer[]{1, 2, 3})); assertUpdated(getDs().update(query, operations, new UpdateOptions()), 1); assertThat(getDs().get(updated).values, is(target)); assertThat(getDs().get(control).values, is(new Integer[]{1, 2, 3})); }
@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)); }
@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)); }
@Test public void testMinKeepsCurrentDocumentValueWhenThisIsSmallerThanSuppliedValue() { checkMinServerVersion(2.6); final ObjectId id = new ObjectId(); final double originalValue = 3D; assertInserted(getDs().update(getDs().find(Circle.class).field("id").equal(id), getDs().createUpdateOperations(Circle.class).setOnInsert("radius", originalValue), new UpdateOptions().upsert(true))); assertUpdated(getDs().update(getDs().find(Circle.class).field("id").equal(id), getDs().createUpdateOperations(Circle.class).min("radius", 5D), new UpdateOptions().upsert(true)), 1); final Circle updatedCircle = getDs().get(Circle.class, id); assertThat(updatedCircle, is(notNullValue())); assertThat(updatedCircle.getRadius(), is(originalValue)); }
@Test public void testSetOnInsertWhenUpdating() { checkMinServerVersion(2.4); ObjectId id = new ObjectId(); assertInserted(getDs().update(getDs().find(Circle.class).field("id").equal(id), getDs().createUpdateOperations(Circle.class).setOnInsert("radius", 1D), new UpdateOptions() .upsert(true))); assertUpdated(getDs().update(getDs().find(Circle.class).field("id").equal(id), getDs().createUpdateOperations(Circle.class).setOnInsert("radius", 2D), new UpdateOptions() .upsert(true)), 1); final Circle updatedCircle = getDs().get(Circle.class, id); assertThat(updatedCircle, is(notNullValue())); assertThat(updatedCircle.getRadius(), is(1D)); }
@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 testVersionedUpsert() { final Datastore datastore = getDs(); Versioned entity = new Versioned(); entity.setName("Value 1"); Query<Versioned> query = datastore.find(Versioned.class); query.filter("name", "Value 1"); UpdateOperations<Versioned> ops = datastore.createUpdateOperations(Versioned.class); ops.set("name", "Value 3"); datastore.update(query, ops, new UpdateOptions().upsert(true)); entity = datastore.find(Versioned.class).find(new FindOptions().limit(1)).tryNext(); Assert.assertEquals("Value 3", entity.getName()); Assert.assertEquals(1, entity.getVersion().longValue()); }
@Test public void testUpdateWithDifferentType() { final ContainsInt cInt = new ContainsInt(); cInt.val = 21; getDs().save(cInt); final UpdateResults res = getDs().update(getDs().find(ContainsInt.class), getDs().createUpdateOperations(ContainsInt.class).inc("val", 1.1D), new UpdateOptions()); assertUpdated(res, 1); assertThat(getDs().find(ContainsInt.class) .find(new FindOptions().limit(1)) .next() .val, is(22)); }
@Test public void testIncVersionNotOverridingOtherInc() { final Versioned version1 = new Versioned(); version1.setCount(0); getDs().save(version1); assertEquals(new Long(1), version1.getVersion()); assertEquals(0, version1.getCount()); Query<Versioned> query = getDs().find(Versioned.class); query.field("_id").equal(version1.getId()); UpdateOperations<Versioned> up = getDs().createUpdateOperations(Versioned.class).inc("count"); getDs().update(query, up, new UpdateOptions().upsert(true)); final Versioned version2 = getDs().get(Versioned.class, version1.getId()); assertEquals(new Long(2), version2.getVersion()); assertEquals(1, version2.getCount()); }
@Test public void isolated() { Assume.assumeTrue(serverIsAtMostVersion(3.6)); UpdateOperations<Circle> updates = getDs().createUpdateOperations(Circle.class) .inc("radius", 1D); assertFalse(updates.isIsolated()); updates.isolated(); assertTrue(updates.isIsolated()); getDs().update(getDs().find(Circle.class) .field("radius").equal(0), updates, new UpdateOptions() .upsert(true) .writeConcern(WriteConcern.ACKNOWLEDGED)); }
@Test @SuppressWarnings("deprecation") public void testInsertUpdate() { assertInserted(getDs().update(getDs().find(Circle.class).field("radius").equal(0), getDs().createUpdateOperations(Circle.class).inc("radius", 1D), true)); assertInserted(getDs().update(getDs().find(Circle.class).field("radius").equal(0), getDs().createUpdateOperations(Circle.class).inc("radius", 1D), new UpdateOptions() .upsert(true))); }