package cn.cloudowr.dict; import com.jfinal.aop.Before; import com.jfinal.render.ContentType; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; import com.mongodb.client.model.UpdateOptions; import com.mongodb.client.model.Updates; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; /** * Created by lyf66 on 2017/2/16. */ public class Controller extends com.jfinal.core.Controller{ public void index() { renderText("2"); } public void dict() { Map paraMap = getParaMap(); List ops = new ArrayList<>(); paraMap.forEach((key, arr) -> { if ("id".equals(key)) { ops.add(Filters.eq("_id", new ObjectId(arr[0]))); } else { ops.add(Filters.eq(key, arr[0])); } }); MongoCollection collection = getCollection(); List documents = new ArrayList<>(); collection.find( Filters.and(ops) ).into(documents); List json = new ArrayList<>(); documents.forEach(doc -> { json.add(doc.toJson()); }); renderText(Arrays.toString(json.toArray()), ContentType.JSON); } public void dictList() { int pageNum = getParaToInt("pageNum", 0); int pageSize = getParaToInt("pageSize", 20); MongoCollection collection = getCollection(); List documents = new ArrayList<>(); collection.find().limit(pageSize).skip(pageNum * pageSize).into(documents); List json = new ArrayList<>(); documents.forEach(doc -> { json.add(doc.toJson()); }); renderText(Arrays.toString(json.toArray()), ContentType.JSON); } public void addDict() { Map paraMap = getParaMap(); Document dict = new Document(); paraMap.forEach((key, arr) -> { dict.put(key, arr[0]); }); getCollection().insertOne(dict); renderJson(dict.toJson()); } @Before(IdInterceptor.class) public void updateDict() { String id = getPara("id"); String action = getPara("action"); String[] keysToUnset = getParaValues("keys"); List ops = new ArrayList<>(); if ("unset".equals(action)) { for (String key : keysToUnset) { if (key.equals("id")) continue; ops.add(Updates.unset(key)); } } else { Map paraMap = getParaMap(); paraMap.forEach((key, arr) -> { if (!"id".equals(key) && !"action".equals(key)) { ops.add(Updates.set(key, arr[0])); } }); } UpdateResult result = getCollection().updateOne( Filters.eq("_id", new ObjectId(id)), Updates.combine( ops ), new UpdateOptions().upsert(true) ); renderJson("result", result.getMatchedCount() >= 1); } @Before(IdInterceptor.class) public void deleteDict() { String id = getPara("id"); DeleteResult result = getCollection().deleteOne( Filters.eq("_id", new ObjectId(id)) ); renderJson("result", result.getDeletedCount() == 1); } private MongoCollection getCollection() { MongoDatabase mongoDataBase = Config.getMongoDataBase(); MongoCollection collection = mongoDataBase.getCollection("dict"); return collection; } }