package com.wujintao.mongo; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.regex.Pattern; import org.junit.Test; import com.mongodb.AggregationOutput; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.MapReduceCommand; import com.mongodb.MapReduceOutput; import com.mongodb.Mongo; import com.mongodb.QueryBuilder; import com.mongodb.WriteConcern; public class TestCase { //DBCursor cursor = coll.find(condition).addOption(Bytes.QUERYOPTION_NOTIMEOUT);//설정 시간 커서 마. @Test /** * 모든 데이터베이스 인스턴스 가져오기 */ public void testGetDBS() { List<String> dbnames = MongoUtil.getMong().getDatabaseNames(); for (String dbname : dbnames) { System.out.println("dbname:" + dbname); } } @Test /** * 삭제 데이터베이스 */ public void dropDatabase() { MongoUtil.getMong().dropDatabase("my_new_db"); } @Test /** * 쿼리 모든 시계 */ public void getAllCollections() { Set<String> colls = MongoUtil.getDB().getCollectionNames(); for (String s : colls) { System.out.println(s); } } @Test public void dropCollection() { MongoUtil.getColl("jellonwu").drop(); } /** * 한 개의 추가 기록 */ @Test public void addData() { DBCollection coll = MongoUtil.getColl("wujintao"); BasicDBObject doc = new BasicDBObject(); doc.put("name", "MongoDB"); doc.put("type", "database"); doc.put("count", 1); BasicDBObject info = new BasicDBObject(); info.put("x", 203); info.put("y", 102); doc.put("info", info); coll.insert(doc); // 설정 write concern 얻을 수 있도록 운영 실패 때 물어봅니다 coll.setWriteConcern(WriteConcern.SAFE); } @Test /** * 색인 생성 */ public void createIndex() { MongoUtil.getColl("wujintao").createIndex(new BasicDBObject("i", 1)); } @Test /** * 인덱스 정보 가져오기 */ public void getIndexInfo() { List<DBObject> list = MongoUtil.getColl("hems_online").getIndexInfo(); for (DBObject o : list) { System.out.println(o); } } @Test /** * 여러 가지 추가 기록 */ public void addMultiData() { for (int i = 0; i <100; i++) { MongoUtil.getColl("wujintao").insert( new BasicDBObject().append("i", i)); } List<DBObject> docs = new ArrayList<DBObject>(); for (int i = 0; i <50; i++) { docs.add(new BasicDBObject().append("i", i)); } MongoUtil.getColl("wujintao").insert(docs); // 설정 write concern 얻을 수 있도록 운영 실패 때 물어봅니다 MongoUtil.getColl("wujintao").setWriteConcern(WriteConcern.SAFE); } @Test /** * 기록 중 첫 번째 */ public void findOne() { DBObject myDoc = MongoUtil.getColl("wujintao").findOne(); System.out.println(myDoc); } @Test /** * 시계 가져오는 중 모든 기록이 가지 개수 */ public void count() { System.out.println(MongoUtil.getColl("wujintao").getCount()); System.out.println(MongoUtil.getColl("wujintao").count()); } @Test /** * 가져오기 조회 결과 집합 기록 세다. */ public void getCount() { DBObject query = new BasicDBObject("name", "a"); long count = MongoUtil.getColl("wujintao").count(query); System.out.println(count); } @Test /** * 모든 결과는 조회 */ public void getAllDocuments() { DBCursor cursor = MongoUtil.getColl("wujintao").find(); try { while (cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } } @Test /** * 하나의 조건 그대로 조회 */ public void queryByConditionOne() { BasicDBObject query = new BasicDBObject(); query.put("name", "MongoDB"); DBCursor cursor = MongoUtil.getColl("wujintao").find(query); try { while (cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } } @Test /** * AND 많이 조건 조회, 구간 조회 */ public void queryMulti() { BasicDBObject query = new BasicDBObject(); // 쿼리 j 안 은 3 k 크다 10 결과 집합 query.put("j", new BasicDBObject("$ne", 3)); query.put("k", new BasicDBObject("$gt", 10)); DBCursor cursor = MongoUtil.getColl("wujintao").find(query); try { while (cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } } @Test /** * 구간 조회 * select * from table where i >50 */ public void queryMulti2() { BasicDBObject query = new BasicDBObject(); query = new BasicDBObject(); query.put("i", new BasicDBObject("$gt", 50)); // e.g. find all where i > DBCursor cursor = MongoUtil.getColl("wujintao").find(query); try { while (cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } } @Test /** * 구간 조회 * select * from table where 20 <i <= 30 //비교적 부호 //"$gt": 크다 //"$gte": 다음보다 크거나 같음 //"$lt": 작다 //"$lte": 다음보다 작거나 같음 //"$in": 포함 */ public void queryMulti3() { BasicDBObject query = new BasicDBObject(); query = new BasicDBObject(); query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30)); DBCursor cursor = MongoUtil.getColl("wujintao").find(query); try { while (cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } } /** * 그룹 in, and select * from test_Table where (a=5 or b=6) and (c=5 or d = 6) */ public void queryMulti4() { BasicDBObject query11 = new BasicDBObject(); query11.put("a", 1); BasicDBObject query12 = new BasicDBObject(); query12.put("b", 2); List<BasicDBObject> orQueryList1 = new ArrayList<BasicDBObject>(); orQueryList1.add(query11); orQueryList1.add(query12); BasicDBObject orQuery1 = new BasicDBObject("$or", orQueryList1); BasicDBObject query21 = new BasicDBObject(); query21.put("c", 5); BasicDBObject query22 = new BasicDBObject(); query22.put("d", 6); List<BasicDBObject> orQueryList2 = new ArrayList<BasicDBObject>(); orQueryList2.add(query21); orQueryList2.add(query22); BasicDBObject orQuery2 = new BasicDBObject("$or", orQueryList2); List<BasicDBObject> orQueryCombinationList = new ArrayList<BasicDBObject>(); orQueryCombinationList.add(orQuery1); orQueryCombinationList.add(orQuery2); BasicDBObject finalQuery = new BasicDBObject("$and", orQueryCombinationList); DBCursor cursor = MongoUtil.getColl("wujintao").find(finalQuery); } @Test /** * IN 조회 * if i need to query name in (a,b); just use { name : { $in : ['a', 'b'] } } * select * from things where name='a' or name='b' * @param coll */ public void queryIn() { BasicDBList values = new BasicDBList(); values.add("a"); values.add("b"); BasicDBObject in = new BasicDBObject("$in", values); DBCursor cursor = MongoUtil.getColl("wujintao").find( new BasicDBObject("name", in)); try { while (cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } } @Test /** * 또는 조회 * select * from table where name = '12' or title = 'p' * @param coll */ public void queryOr() { QueryBuilder query = new QueryBuilder(); query.or(new BasicDBObject("name", 12), new BasicDBObject("title", "p")); DBCursor cursor = MongoUtil.getColl("wujintao").find(query.get()).addSpecial("$returnKey", ""); try { while (cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } } @Test public void customQueryField() throws UnknownHostException{ Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("zhongsou_ad"); BasicDBObjectBuilder bulder = new BasicDBObjectBuilder(); bulder.add("times",1); bulder.add("aid",1); DBCursor cusor = db.getCollection("ad_union_ad_c_1").find(new BasicDBObject(),bulder.get()); for (DBObject dbObject : cusor) { System.out.println(dbObject); } } @Test public void mapReduce() throws UnknownHostException{ Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("zhongsou_ad"); /*** * book1 = {name : "Understanding JAVA", pages : 100} * book2 = {name : "Understanding JSON", pages : 200} * db.books.save(book1) * db.books.save(book2) * book = {name : "Understanding XML", pages : 300} * db.books.save(book) * book = {name : "Understanding Web Services", pages : 400} * db.books.save(book) * book = {name : "Understanding Axis2", pages : 150} * db.books.save(book) * var map = function() { var category; if ( this.pages >= 250 ) category = 'Big Books'; else category = "Small Books"; emit(category, {name: this.name}); }; var reduce = function(key, values) { var sum = 0; values.forEach(function(doc) { sum += 1; }); return {books: sum}; }; var count = db.books.mapReduce(map, reduce, {out: "book_results"}); */ try { DBCollection books = db.getCollection("books"); BasicDBObject book = new BasicDBObject(); book.put("name", "Understanding JAVA"); book.put("pages", 100); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding JSON"); book.put("pages", 200); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding XML"); book.put("pages", 300); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding Web Services"); book.put("pages", 400); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding Axis2"); book.put("pages", 150); books.insert(book); String map = "function() { "+ "var category; " + "if ( this.pages >= 250 ) "+ "category = 'Big Books'; " + "else " + "category = 'Small Books'; "+ "emit(category, {name: this.name});}"; String reduce = "function(key, values) { " + "var sum = 0; " + "values.forEach(function(doc) { " + "sum += 1; "+ "}); " + "return {books: sum};} "; MapReduceCommand cmd = new MapReduceCommand(books, map, reduce, null, MapReduceCommand.OutputType.INLINE, null); MapReduceOutput out = books.mapReduce(cmd); for (DBObject o : out.results()) { System.out.println(o.toString()); } } catch (Exception e) { e.printStackTrace(); } } @Test public void GroupByManyField() throws UnknownHostException{ //이 방법은 없어 실행 성공 Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("libary"); DBCollection books = db.getCollection("books"); BasicDBObject groupKeys = new BasicDBObject(); groupKeys.put("total", new BasicDBObject("$sum","pages")); BasicDBObject condition = new BasicDBObject(); condition.append("pages", new BasicDBObject().put("$gt", 0)); String reduce = "function(key, values) { " + "var sum = 0; " + "values.forEach(function(doc) { " + "sum += 1; "+ "}); " + "return {books: sum};} "; /** BasicDBList basicDBList = (BasicDBList)db.getCollection("mongodb 에서 집합 인코딩 또는 코드") .group(DBObject key, --그룹 필드 즉 group by 필드 DBObject cond, --검색 중 where 조건 DBObject initial, --필드 값 초기화 각 String reduce, --모든 그룹 모두 필요한 실행할 Function String finial -- 종결 Funciton 결과에 대한 최종 처리 */ DBObject obj = books.group(groupKeys, condition, new BasicDBObject(), reduce); System.out.println(obj); AggregationOutput ouput = books.aggregate(new BasicDBObject("$group",groupKeys)); System.out.println(ouput.getCommandResult()); System.out.println(books.find(new BasicDBObject("$group",groupKeys))); } @Test /** * 페이지 검색 */ public void pageQuery() { DBCursor cursor = MongoUtil.getColl("wujintao").find().skip(0) .limit(10); while (cursor.hasNext()) { System.out.println(cursor.next()); } } /** * 퍼지 조회 */ public void likeQuery() { Pattern john = Pattern.compile("joh?n"); BasicDBObject query = new BasicDBObject("name", john); // finds all people with "name" matching /joh?n/i DBCursor cursor = MongoUtil.getColl("wujintao").find(query); } @Test /** * 조건이 삭제 */ public void delete() { BasicDBObject query = new BasicDBObject(); query.put("name", "xxx"); // 그리고 다시 찾을 삭제 및 삭제 대상 DBObject removeObj = MongoUtil.getColl("wujintao").findAndRemove(query); System.out.println(removeObj); } @Test /** * 업데이트 */ public void update() { BasicDBObject query = new BasicDBObject(); query.put("name", "liu"); DBObject stuFound = MongoUtil.getColl("wujintao").findOne(query); stuFound.put("name", stuFound.get("name") + "update_1"); MongoUtil.getColl("wujintao").update(query, stuFound); } }
이 안에 있는 MongoUtil.java 걸친 다음과 같다:
package com.wujintao.mongo; import java.net.UnknownHostException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.Mongo; /** * to see: * Mongo 도구 클래스: 디자인 한 사례 모드 위해 때마다 월 변화가 데이터베이스 연결 이름 변화가 있으면, 이것은 비즈니스 규칙 * MongoDB 자바 때문에 구동 것은 스레드 안전, 일반 응용 대해 단 한 Mongo 인스턴스 바로, Mongo 개 내장 연결 풀 있다 (풀 크기 기본값은 10개). * 에 대해 많은 글을 읽기 및 환경 속에서 확보를 위해 한 정보 중 사용 같은 DB 때 우리는 쓸 수 있는 이하 방식 보증 일관성: * DB mdb = mongo.getDB('dbname'); * mdb.requestStart(); * // 업무 코드 * mdb.requestDone(); * DB 및 DBCollection 절대 스레드 안전한 * @author wujintao */ public class MongoUtil{ private static Mongo mongo; private static DBCollection coll; private static Log log = LogFactory.getLog(MongoUtil.class); private static DB db; static{ try { MongoOptions options = new MongoOptions(); options.autoConnectRetry = true; options.connectionsPerHost = 1000; options.maxWaitTime = 5000; options.socketTimeout = 0; options.connectTimeout = 15000; options.threadsAllowedToBlockForConnectionMultiplier = 5000; //사실 Mongo 인스턴스 대표 한 데이터베이스 연결 지, 설령 다중 스레드 환경 속에서 한 Mongo 인스턴스 우리한테 충분해요 mongo = new Mongo(new ServerAddress(DBMongoConfig.getHost(),DBMongoConfig.getPort()),options); //mongo = new Mongo(DBMongoConfig.getHost(),DBMongoConfig.getPort()); // or, to connect to a replica set, supply a seed list of members // Mongo m = new Mongo(Arrays.asList(new ServerAddress("localhost", // 27017), // new ServerAddress("localhost", 27018), // new ServerAddress("localhost", 27019))); // 주의 Mongo 이미 실현되었다 연결 지 고 은 스레드 안전한. // 대부분의 사용자가 사용 mongodb 모두 안전 속그물 아래 하지만 만약 것이다 mongodb 신설 안전 검증 모드 위해 필요하다고 지금 클라이언트 사용자 이름과 비밀번호: // boolean auth = db.authenticate(myUserName, myPassword); } catch (UnknownHostException e) { log.info("get mongo instance failed"); } } public static DB getDB(){ if(db==null){ db = mongo.getDB(DBMongoConfig.getDbname()); } return db; } public static Mongo getMong(){ return mongo; } public static DBCollection getColl(String collname){ return getDB().getCollection(collname); } }
참조 : http://www.programkr.com/blog/METM0ADMwYT4.html
'Industry 4.0 > Big Data' 카테고리의 다른 글
Mac OS에 MongoDB 설치 및 Robomongo 설치 (0) | 2019.08.16 |
---|---|
PINPOINT 란 (0) | 2017.03.02 |
[MongoDB] MongoDB 에서 Sequence 사용하기 (0) | 2014.10.07 |
[MongoDB] MongoDB - Java Driver (0) | 2014.10.01 |
[MongoDB] how to use “find” to search “_id => OBjectID(”id“)” in Perl API (2) | 2014.10.01 |
댓글