@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 @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; }
/** * 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()); }
@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 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 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 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)); }
@Test public void testInsertWithRef() { final Pic pic = new Pic(); pic.setName("fist"); final Key<Pic> picKey = getDs().save(pic); assertInserted(getDs().update(getDs().find(ContainsPic.class).filter("name", "first").filter("pic", picKey), getDs().createUpdateOperations(ContainsPic.class) .set("name", "A"), new UpdateOptions().upsert(true))); assertThat(getDs().find(ContainsPic.class).count(), is(1L)); getDs().delete(getDs().find(ContainsPic.class)); assertInserted(getDs().update(getDs().find(ContainsPic.class).filter("name", "first").filter("pic", pic), getDs().createUpdateOperations(ContainsPic.class).set("name", "second"), new UpdateOptions() .upsert(true))); assertThat(getDs().find(ContainsPic.class).count(), is(1L)); //test reading the object. final ContainsPic cp = getDs().find(ContainsPic.class) .find(new FindOptions().limit(1)) .next(); assertThat(cp, is(notNullValue())); assertThat(cp.getName(), is("second")); assertThat(cp.getPic(), is(notNullValue())); assertThat(cp.getPic().getName(), is(notNullValue())); assertThat(cp.getPic().getName(), is("fist")); }
@Test public void testMaxKeepsCurrentDocumentValueWhenThisIsLargerThanSuppliedValue() { checkMinServerVersion(2.6); final ObjectId id = new ObjectId(); final double originalValue = 2D; Datastore ds = getDs(); assertInserted(ds.update(ds.find(Circle.class) .field("id").equal(id), ds.createUpdateOperations(Circle.class) .setOnInsert("radius", originalValue), new UpdateOptions() .upsert(true))); assertUpdated(ds.update(ds.find(Circle.class) .field("id").equal(id), ds.createUpdateOperations(Circle.class) .max("radius", 1D), new UpdateOptions() .upsert(true)), 1); assertThat(ds.get(Circle.class, id).getRadius(), is(originalValue)); }
@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 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))); }