2019獨角獸企業重金招聘Python工程師標準>>>
本文節選自 《Netkiller Spring Cloud 手札》
?
Netkiller Spring Cloud 手札
Spring Cloud Cookbook
Mr.?Neo?Chan,?陳景峯(BG7NYT)
中國廣東省深圳市望海路半島城邦三期
518067
+86?13113668890<netkiller@msn.com>
$Id: book.xml 606 2013-05-29 09:52:58Z netkiller $
版權 ? 2015-2018 Neo Chan
?
版權聲明
轉載請與作者聯系,轉載時請務必標明文章原始出處和作者信息及本聲明。
|
|
|
|
?
2017-11
我的系列文檔
編程語言
Netkiller Architect 手札 | Netkiller Developer 手札 | Netkiller Java 手札 | Netkiller Spring 手札 | Netkiller PHP 手札 | Netkiller Python 手札 |
Netkiller Testing 手札 | Netkiller Cryptography 手札 | Netkiller Perl 手札 | Netkiller Docbook 手札 | Netkiller Project 手札 | Netkiller Database 手札 |
5.2.4.?mongoTemplate
導入與模板相關的包
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;
注入 MongoTemplate 對象
@Autowiredprivate MongoTemplate mongoTemplate;
5.2.4.1.?Save 保存
User user = new User(); user.setName("Netkiller"); mongoTemplate.save(user, "user");
更新數據
user = mongoTemplate.findOne(Query.query(Criteria.where("name").is("Jam")), User.class); user.setName("Neo"); mongoTemplate.save(user, "user");
5.2.4.2.?Insert
User user = new User(); user.setName("Neo"); mongoTemplate.insert(user, "user");
BSONObject personBsonObj = BasicDBObjectBuilder.start().add("name","Neo Chen").add("age",27).add("address",null).get();mongoTemplate.insert(personBsonObj,"personCollection");
document in the db:
db.personCollection.findOne().pretty(); {"age":21,"name":"John Doe";"address":null}*
5.2.4.3.?更新第一條
Query query = new Query(); query.addCriteria(Criteria.where("name").is("Neo")); Update update = new Update(); update.set("name", "Netkiller"); mongoTemplate.updateFirst(query, update, User.class);
5.2.4.4.?更新所有數據
Query query = new Query(); query.addCriteria(Criteria.where("name").is("Neo")); Update update = new Update(); update.set("name", "Jerry"); mongoTemplate.updateMulti(query, update, User.class);
5.2.4.5.?查找并保存
Query query = new Query(); query.addCriteria(Criteria.where("name").is("Luck")); Update update = new Update(); update.set("name", "Lisa"); User user = mongoTemplate.findAndModify(query, update, User.class);
5.2.4.6.?upsert
Query query = new Query(); query.addCriteria(Criteria.where("name").is("Green")); Update update = new Update(); update.set("name", "Tom"); mongoTemplate.upsert(query, update, User.class);
5.2.4.7.?刪除
User user = new User(); user.setId("5bbf091efd9557069c4a25c5") mongoTemplate.remove(user, "user");
5.2.4.8.?查找一條數據
public Person findOneByName(String name) {Query query = new Query();query.addCriteria(Criteria.where("name").is(name));return mongoTemplate.findOne(query, Person.class); }
5.2.4.9.?查找所有數據
public List<Person> findByName(String name) {Query query = new Query();query.addCriteria(Criteria.where("name").is(name));return mongoTemplate.find(query, Person.class); }
5.2.4.10.?Query
5.2.4.10.1.?翻頁
public List<Person> getAllPersonPaginated(int pageNumber, int pageSize) {Query query = new Query();query.skip(pageNumber * pageSize);query.limit(pageSize);return mongoTemplate.find(query, Person.class); }
5.2.4.10.2.?between
實現一個區間條件 new Criteria("createdDate").gte(beginDate).lte(endDate)
public boolean AccountDeposit(Date beginDate, Date endDate) {MatchOperation matchOperation = match(new Criteria("createdDate").gte(beginDate).lte(endDate));GroupOperation groupOperation = group("loginname").sum("amount").as("amount");SortOperation sortOperation = sort(new Sort(Direction.ASC, "loginname"));Aggregation aggregation = newAggregation(matchOperation, groupOperation, sortOperation);AggregationResults<AccountSettlementDetails> results = mongoTemplate.aggregate(aggregation, AccountSettlementDetails.class, AccountSettlementDetails.class);if (results.getMappedResults() != null) {log.info(results.getRawResults().get("result").toString());for (AccountSettlementDetails settlementDetails : results.getMappedResults()) {log.info("{}", settlementDetails.toString());}}return true;}
5.2.4.11.?Criteria
5.2.4.11.1.?is
Query query = new Query(); query.addCriteria(Criteria.where("name").is("Neo")); List<User> users = mongoTemplate.find(query, User.class);
5.2.4.11.2.?Regex 正則表達式搜索
查詢以N開頭的名字
Query query = new Query(); query.addCriteria(Criteria.where("name").regex("^N")); List<User> users = mongoTemplate.find(query,User.class);
查詢以o結尾的名字
Query query = new Query(); query.addCriteria(Criteria.where("name").regex("o$")); List<User> users = mongoTemplate.find(query, User.class);
5.2.4.11.3.?lt 和 gt
查詢年齡小于 < 30 并 > 20 的用戶
Query query = new Query(); query.addCriteria(Criteria.where("age").lt(30).gt(20)); List<User> users = mongoTemplate.find(query,User.class);
查找日期范圍
Date start = DateUtil.convertStringToDateTime("2014-02-10 20:38:44"); Date end = DateUtil.convertStringToDateTime("2014-02-10 20:38:50");Query query = new Query(); Criteria criteria = Criteria.where("delflag").is(false); criteria.and("modifyDate").gte(start).lte(end); query.addCriteria(criteria); query.limit(10);
5.2.4.11.4.?
<programlisting><![CDATA[ Query query = new Query(); query.addCriteria(new Criteria().andOperator(Criteria.where("field1").exists(true),Criteria.where("field1").ne(false)) );List<Foo> result = mongoTemplate.find(query, Foo.class); System.out.println("query - " + query.toString());for (Foo foo : result) {System.out.println("result - " + foo); }
5.2.4.11.5.?包含
public List<Person> findByFavoriteBooks(String favoriteBook) {Query query = new Query();query.addCriteria(Criteria.where("favoriteBooks").in(favoriteBook));return mongoTemplate.find(query, Person.class); }
5.2.4.12.?Update
5.2.4.12.1.?set
Update update = new Update(); update.set("name", "Netkiller");
5.2.4.12.2.?追加數據
Query query = Query.query(Criteria.where("id").is("5bbf091efd9557069c4a25c5"));Update update = new Update().push("author", new Author("neo", "chen"));mongoTemplate.updateFirst(query, update, Article.class);
5.2.4.12.3.?更新數據
Query query = Query.query(Criteria.where("classId").is("1").and("Students.studentId").is("1"));Update update = Update.update("Students.$.name", "lisa");mongoTemplate.upsert(query, update, "class");
5.2.4.12.4.?刪除數據
Query query = Query.query(Criteria.where("classId").is("1").and("Students.studentId").is("3"));Update update = new Update();update.unset("Students.$");mongoTemplate.updateFirst(query, update, "class");
5.2.4.12.5.?inc
public void updateMultiplePersonAge() {Query query = new Query();Update update = new Update().inc("age", 1);mongoTemplate.findAndModify(query, update, Person.class);; }
5.2.4.12.6.?update.addToSet
Query query = Query.query(Criteria.where("classId").is("1")); Student student = new Student("1", "lisa", 3, "girl"); Update update = new Update(); update.addToSet("Students", student); mongoTemplate.upsert(query, update, "class");
5.2.4.13.?Sort
按照年齡排序
Query query = new Query(); query.with(new Sort(Sort.Direction.ASC, "age")); List<User> users = mongoTemplate.find(query,User.class);
5.2.4.14.?Query + PageRequest
final Pageable pageableRequest = new PageRequest(0, 2); Query query = new Query(); query.with(pageableRequest);
5.2.4.15.?newAggregation
MultilevelDirectSellingAccountRewardsSettlementDetails multilevelDirectSellingAccountRewardsSettlementDetails = new MultilevelDirectSellingAccountRewardsSettlementDetails();multilevelDirectSellingAccountRewardsSettlementDetails.setLoginname("111");multilevelDirectSellingAccountRewardsSettlementDetails.setPhone("111");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderLoginname("111");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderPhone("111");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderName("Neo");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderType("客戶");multilevelDirectSellingAccountRewardsSettlementDetails.setAmount(5.02);multilevelDirectSellingAccountRewardsSettlementDetails.setCreatedDate(new Date());multilevelDirectSellingAccountRewardsSettlementDetailsRepository.save(multilevelDirectSellingAccountRewardsSettlementDetails);Date beginDate = this.getToday("00:00:00");Date endDate = this.getToday("23:59:59");log.info(beginDate.toString() + " ~ " + endDate.toString());GroupOperation groupOperation = group("loginname").sum("amount").as("amount");MatchOperation matchOperation = match(new Criteria("createdDate").gte(beginDate).lte(endDate));SortOperation sortOperation = sort(new Sort(Direction.ASC, "loginname"));Aggregation aggregation = newAggregation(matchOperation, groupOperation, sortOperation);AggregationResults<MultilevelDirectSellingAccountRewardsSettlementDetails> results = mongoTemplate.aggregate(aggregation, MultilevelDirectSellingAccountRewardsSettlementDetails.class, MultilevelDirectSellingAccountRewardsSettlementDetails.class); System.out.println(results.getRawResults().get("result").toString());
5.2.4.16.?創建索引
mongoOps.indexOps(User.class).ensureIndex(new Index().on("name", Direction.ASC));
5.2.4.17.?子對象操作
5.2.4.17.1.?List 類型
package cn.netkiller.api.domain;import java.util.List;import javax.persistence.Id; import org.springframework.data.mongodb.core.mapping.Document;@Document public class Article {@Idprivate String id;private String title;private String description;List<Author> author;public static class Author {private String id;private String firstname;private String lastname;public Author(String firstname, String lastname) {this.firstname = firstname;this.lastname = lastname;}} }
更新
db.getCollection('foo').update({"author.firstname":"neo"},{"$set":{"author.$.firstname":"netkiller"}})
更新數據
Query query = Query.query(Criteria.where("author.firstname").is("neo"));Update update = new Update().set("author.$.firstname", "netkiller");mongoTemplate.updateFirst(query, update, Article.class);
追加數據
Query query = Query.query(Criteria.where("id").is("5bbf091efd9557069c4a25c5"));Update update = new Update().push("author", new Author("neo", "chen"));mongoTemplate.updateFirst(query, update, Article.class);
刪除數據
Query query = Query.query(Criteria.where("id").is("5bbf091efd9557069c4a25c5"));Update update = new Update().pull("author", new Author("jerry", "lee"));mongoTemplate.updateFirst(query, update, Article.class);
?
?
?