package com.lichhao.test;
import static org.junit.Assert.*;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
import static org.springframework.data.mongodb.core.query.Update.update;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.spring.mongodb.example.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.hamcrest.Matchers.*;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring-config.xml" })
public class MongoTemplateTest {
private Log log;
@Autowired
private MongoTemplate mongoTemplate;
@Before
public void setLog() {
log = LogFactory.getLog(MongoTemplateTest.class);
}
@Test
public void testMongoTemplate() {
// MongoOperations mongoOps = mongoTemplate;
// mongoTemplate.dropCollection(Person.class);
mongoTemplate.dropCollection("person");
Person p = new Person("lichhao", 23);
// Insert is used to initially store the object into the database.
mongoTemplate.insert(p);
log.info("Insert: " + p); // Find
p = mongoTemplate.findById(p.getId(), Person.class);
log.info("Found: " + p); // Update
assertEquals(23, p.getAge());
mongoTemplate.updateFirst(query(where("name").is("lichhao")),
update("age", 35), Person.class);
p = mongoTemplate.findOne(query(where("name").is("lichhao")),
Person.class);
log.info("Updated: " + p); // Delete mongoTemplate.remove(p);
assertEquals(35, p.getAge());
// Check that deletion worked
List<Person> people = mongoTemplate.findAll(Person.class);
log.info("Number of people = : " + people.size());
assertEquals(1, people.size());
// --------------------------------------
mongoTemplate.insert(new Person("Tom", 21));
mongoTemplate.insert(new Person("Dick", 22));
mongoTemplate.insert(new Person("Harry", 23));
Query queryObj = new Query(Criteria.where("name").is("Harry"));
Update updateObj = new Update().inc("age", 1);
// return's old person object
p = mongoTemplate.findAndModify(queryObj, updateObj, Person.class);
assertThat(p.getName(), is("Harry"));
assertThat(p.getAge(), is(23));
p = mongoTemplate.findOne(queryObj, Person.class);
assertThat(p.getAge(), is(24));
// Now return the newly updated document when updating
p = mongoTemplate.findAndModify(queryObj, updateObj,
new FindAndModifyOptions().returnNew(true), Person.class);
assertThat(p.getAge(), is(25));
// -------------------------------------
Query queryObj2 = new Query(Criteria.where("name").is("Mary"));
p = mongoTemplate.findAndModify(
queryObj2,
updateObj,
new FindAndModifyOptions().returnNew(true).upsert(true)
.remove(false), Person.class);
assertThat(p.getName(), is("Mary"));
assertThat(p.getAge(), is(1));
// mongoTemplate.dropCollection(Person.class);
mongoTemplate.dropCollection("person");
}
}