on
[mongoDB] 날짜 데이터
[mongoDB] 날짜 데이터
https://www.w3schools.com/
db.datecoll.insert ( {_id : 1, name :'가나다', dt : ISODate()}) db.datecoll.insert ( { _id:2, name: 'abc', dt:ISODate("2020-01-01") } ) db.datecoll.insert ( { _id:3, name: 'xyz', dt:ISODate("2021-05-25 13:10") } ) db.datecoll.insert ( { _id:4, name: 'lmn', dt:ISODate("2021-05-25T13:05") } ) db.datecoll.insert ( { _id:5, name: 'ㅋㅋ', dt:ISODate("2020-10-05") } ) db.datecoll.insert ( { _id:6, name: 'mmm', dt: new Date() } ) db.datecoll.insert ( { _id:7, name: 'kkk', dt:ISODate("1998-11-07T00:00:00Z") } )
공백을 넣어줘도 되고 T도 넣어줘도됨
시분초 설정 안 하면 0시 0분 0초가 된다.
db.datecoll.find().sort({dt:1}) // dt에 대해서 내림차순 정렬 db.datecoll.find().sort({dt:-1}) // dt에 대해서 오름차순 정렬
년도만 출력하기
1. cursor 변수 사용
var v = db.datecoll.find() while(v.hasNext()){ var d = v.next(); print(d.dt.getYear()+1900) }
getYear() : 세기만 나온다. 꼭 1900더해줘야한다.
2. forEach 사용
db.datecoll.find().forEach( function(c){ print(c.dt.getFullYear()); } )
2021 2020 2021 2021 2020 2021 1998
이름없는 변수를 만들어서 전달,
수행만 하겠다 하면 forEach써라/
3. map사용
db.datecoll.find().map( function(c){ c = c.dt.getFullYear(); return c; } )
[ 2021, 2020, 2021, 2021, 2020, 2021, 1998 ]
처리하고 결과 리턴
리턴 된 것을 차곡 차곡 보관했다가 리스트에 담아서 return
반복문 없어도 됨.
package mongo.level1; import com.mongodb.MongoClientURI; import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoIterable; import com.mongodb.MongoClient; public class MongoJava { public static void main(String[] args) { try { MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017")); System.out.println("접속 성공-------"); MongoIterabledblist = mongoClient.listDatabaseNames(); System.out.println("[데이터 베이스 리스트]"); for(String name : dblist) System.out.println(name); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoIterable clist = db.listCollectionNames(); System.out.println("[edudb 데이터베이스의 컬렉션 리스트]"); for(String name : clist) { System.out.println(name); } mongoClient.close(); }catch (Exception exception) { System.err.println(exception.getClass().getName() + " : " + exception.getMessage()); } } }
package mongo.level1; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class SelectMongo1 { public static void main(String[] args) { try { MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoCollection collection = db.getCollection("book"); MongoCursor cursor = collection.find().iterator(); while(cursor.hasNext()) { System.out.println(cursor.next()); } }catch (Exception exception) { System.err.println(exception.getClass().getName() + " : " + exception.getMessage()); } } }
모두다 json형식이지만, mongoDB에 들어가는 데이터만 도큐먼트
[읽어오기]
package mongo.level1; import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class SelectMongo2 { public static void main(String[] args) { Logger mongoLogger = Logger.getLogger("org.mongodb.driver"); mongoLogger.setLevel(Level.SEVERE); try { MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoCollection collection = db.getCollection("book"); MongoCursor cursor = collection.find().iterator(); while(cursor.hasNext()) { System.out.println(cursor.next()); } System.out.println("--------------------------------"); cursor = collection.find().iterator(); while(cursor.hasNext()) { Document doc = cursor.next(); System.out.println(doc.get("name") + " : " + doc.get("price")); } System.out.println("--------------------------------"); Consumer printConsumer1 = new Consumer() { @Override public void accept(final Document document) { System.out.println(document.toJson()); } }; collection.find().forEach(printConsumer1); System.out.println("--------------------------------"); Consumer printConsumer2 = doc -> System.out.println(doc.toJson()); collection.find().forEach(printConsumer2); mongoClient.close(); } catch (Exception exception) { System.err.println(exception.getClass().getName() + ": " + exception.getMessage()); } } }
Logger mongoLogger = Logger.getLogger("org.mongodb.driver"); org.mongodb.driver패키지에 들어가있는 출력을 다 무시해라
mongoLogger.setLevel(Level.SEVERE); elvel.SEVERE레벨만 출력해라
new MongoClient("localhost", 27017); 서버주소, 포트번호 각각 url형식말고, 각각 아규먼트로 주는 거 가능
cursor = collection.find().iterator(); cursor객체는 한번만 읽을 수 있기 때문에, 한번 더 넣는다.
getint(), getString 가능
System.out.println(doc.get("price").getClass().getName()); get객체가 어떻게 리턴하는지 알 수 있다.
doc.get("price")는 리턴객체가 double이지만, 오브젝트 형으로 가서 실제 object타입이라서 object형이 쓸 수 있는것만 사용할 수 있는데 이게 정수형으로 바꿀려면 ( (java.lang.Double) doc.get("price")) .intValue() )
Consumer printConsumer2 = doc -> System.out.println(doc.toJson()); 람다 함수 식 받아서 출력한다. 간단한 것만 가능
package mongo.level1; import java.util.logging.Level; import java.util.logging.Logger; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; public class SelectMongo3 { public static void main(String[] args) { Logger mongoLogger = Logger.getLogger("org.mongodb.driver"); mongoLogger.setLevel(Level.SEVERE); try { MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoCollection collection = db.getCollection("book"); Document doc = collection.find().first(); System.out.println(doc.toJson()); FindIterabledlist = collection.find(Filters.gt("price", 10000)); for(Document doc1 : dlist) System.out.println(doc1.toJson()); dlist = collection.find(Filters.eq("name", "javascript")); for(var doc1 : dlist) System.out.println(doc1.toJson()); dlist = collection.find(Filters.regex("name", "^ja")); for(var doc1 : dlist) System.out.println(doc1.toJson()); dlist = collection.find(Filters.and(Filters.gt("price", 10000), Filters.lte("price", 20000))); for(Document doc1 : dlist) System.out.println(doc1.toJson()); mongoClient.close(); } catch (Exception exception) { System.err.println(exception.getClass().getName() + ": " + exception.getMessage()); } } }
collection.find().first(); 첫번째 도큐먼트만
filters이용 gt, eq, regex, lte메소드 사용
package mongo.level1; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; public class SelectMongo4 { public static void main(String[] args) { Logger mongoLogger = Logger.getLogger("org.mongodb.driver"); mongoLogger.setLevel(Level.SEVERE); try { MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoCollection collection = db.getCollection("datecoll"); Document doc = collection.find().first(); System.out.println(doc.toJson()); FindIterable dlist = collection.find(Filters.eq("name", "ㅋㅋ")); for (var doc1 : dlist) { Document doc2 = doc1; System.out.println(doc2.get("dt")); Date d = (Date)doc2.get("dt"); SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy년 MM 월 dd일 HH시 mm분 ss초"); System.out.println(sdf.format(d)); } mongoClient.close(); } catch (Exception exception) { System.err.println(exception.getClass().getName() + ": " + exception.getMessage()); } } }
MongoCollection collection = db.getCollection("datecoll"); datecoll에서 컬렉션 가지고 오기
자바스크립트 데이터 객체를 불러오기
Date d = (Date)doc2.get("dt"); iso데이터 객체, js데이터 객체는 java.util.Date객체로 변환해서 온다. dt : Mon Oct 05 09:00:00 KST 2020 Data형으로 강제 형 변환
package mongo.level1; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Projections; public class SelectMongoLab { public static void main(String[] args) { Logger mongoLogger = Logger.getLogger("org.mongodb.driver"); mongoLogger.setLevel(Level.SEVERE); try { MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoCollection collection = db.getCollection("cuty"); Bson obj = Projections.fields(Projections.include("name","age","book")); MongoCursor cursor = collection.find().projection(obj).iterator(); while(cursor.hasNext()) { Document doc = cursor.next(); //getDouble(get("name")) //가능 System.out.printf("%s 팀원의 나이는 %.0f
",doc.get("name"), doc.get("age")); System.out.println("[좋아하는 책리스트]"); List data = new ArrayList(); ArrayList bookList = (ArrayList) doc.get("book" ); for(Document b : bookList) { System.out.println("책이름 : " + b.get("bookname")); System.out.println("출판사 : " + b.get("publishing_house")); if(b.get("Genre")!= null)System.out.println("장르 : " + b.get("Genre")); } System.out.println("-------------------------------------------------------------"); } mongoClient.close(); }catch (Exception e) { // TODO: handle exception } } }
Bson obj = Projections.fields(Projections.include("name","age","book"));
MongoCursor cursor = collection.find().projection(obj).iterator(); 모든거 출력해도 되는데 원하는 것만 출력한다. find하는데 두번째 아규먼트라고 생각하면 됨.
package mongo.level1; import java.util.logging.Level; import java.util.logging.Logger; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; import com.mongodb.client.model.Updates; public class UpdateMongo1 { public static void main(String[] args) { Logger mongoLogger = Logger.getLogger("org.mongodb.driver"); mongoLogger.setLevel(Level.SEVERE); try { MongoClient mongoClient = new MongoClient(); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoCollection collection = db.getCollection("book"); collection.updateOne(Filters.eq("name", "spring"), Updates.set("price", 29999)); collection.updateOne(Filters.eq("name", "spark"), Updates.inc("price", 11)); MongoCursor cursor = collection.find().iterator(); while(cursor.hasNext()) { Document doc1 = cursor.next(); System.out.println(doc1.get("name") + " : " + doc1.get("price")); } mongoClient.close(); } catch (Exception exception) { System.err.println(exception.getClass().getName() + ": " + exception.getMessage()); } } }
원하는 필드만 updateone
package mongo.level1; import java.util.logging.Level; import java.util.logging.Logger; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; public class UpdateMongo2 { public static void main(String[] args) { Logger mongoLogger = Logger.getLogger("org.mongodb.driver"); mongoLogger.setLevel(Level.SEVERE); try { MongoClient mongoClient = new MongoClient(); MongoDatabase db = mongoClient.getDatabase("edudb"); MongoCollection collection = db.getCollection("book"); Bson filter = Filters.eq("name", "spring"); Document doc = new Document("name", "SPRING").append("price", 30000); collection.replaceOne(filter, doc); MongoCursor cursor = collection.find().iterator(); while(cursor.hasNext()) { Document doc1 = cursor.next(); System.out.println(doc1.get("name") + " : " + doc1.get("price")); } mongoClient.close(); } catch (Exception exception) { System.err.println(exception.getClass().getName() + ": " + exception.getMessage()); } } }
Filters.eq("name", "spring"); 이름이 spring인거 찾아서 bson 객체로
서브 파티 api import com, import org
mongoDB는 오토인크리먼트가 없음
from http://v-ridescent.tistory.com/145 by ccl(A) rewrite - 2021-12-24 21:28:05