[MONGODB] 자바 드라이버 MongoDB를 집계
MONGODB자바 드라이버 MongoDB를 집계
나는 자바 드라이버로 MongoDB의 통합 프레임 워크를 사용하는 당신의 도움이 필요합니다. 난이 설명서와 함께, 내 요청을 작성하는 방법을 이해하지 않습니다.
나는 내 컬렉션에서 모든 항목에서 200 오래된 전망을 싶어. 여기에 (I 콘솔 모드에서 원하는처럼 작동) 내 몽고 쿼리는 다음과 같습니다
db.myCollection.aggregate(
{$unwind : "$views"},
{$match : {"views.isActive" : true}},
{$sort : {"views.date" : 1}},
{$limit : 200},
{$project : {"_id" : 0, "url" : "$views.url", "date" : "$views.date"}}
)
이 컬렉션의 항목은 하나 또는 여러 전망이 있습니다. 내 질문 요청 결과에 대해 아니다, 나는 자바 syntaxe을 알고 싶어요.
해결법
-
==============================
1.마지막으로 해결책을 발견, 나는 원래 요청보다 같은 결과를 얻을.
마지막으로 해결책을 발견, 나는 원래 요청보다 같은 결과를 얻을.
집계 문서
MongoCollection<Document> collection = database.getCollection("myCollection"); AggregateIterable<Document> output = collection.aggregate(Arrays.asList( new Document("$unwind", "$views"), new Document("$match", new Document("views.isActive", true)), new Document("$sort", new Document("views.date", 1)), new Document("$limit", 200), new Document("$project", new Document("_id", 0) .append("url", "$views.url") .append("date", "$views.date")) )); // Print for demo for (Document dbObject : output) { System.out.println(dbObject); }
당신은 고정 수입에 더 읽기 쉽게 만들 수 있습니다 : 정적 com.mongodb.client.model.Aggregates를 가져. * ;. COMPLET 예를 들어 koulini 대답을 참조하십시오.
집계 문서
Iterable<DBObject> output = collection.aggregate(Arrays.asList( (DBObject) new BasicDBObject("$unwind", "$views"), (DBObject) new BasicDBObject("$match", new BasicDBObject("views.isActive", true)), (DBObject) new BasicDBObject("$sort", new BasicDBObject("views.date", 1)), (DBObject) new BasicDBObject("$limit", 200), (DBObject) new BasicDBObject("$project", new BasicDBObject("_id", 0) .append("url", "$views.url") .append("date", "$views.date")) )).results(); // Print for demo for (DBObject dbObject : output) { System.out.println(dbObject); }
쿼리 변환 로직 : 이 링크에 감사드립니다
-
==============================
2.그것은 당신이 크게 MongoDB를위한 자바 집계 방법을 사용하여, 여기에 대한 답변으로 표시된 코드를 향상시킬 수 있다는 지적 가치가있다.
그것은 당신이 크게 MongoDB를위한 자바 집계 방법을 사용하여, 여기에 대한 답변으로 표시된 코드를 향상시킬 수 있다는 지적 가치가있다.
코드 예제로하자 걸릴 자신의 질문에 대한 영업 이익의 대답.
AggregateIterable<Document> output = collection.aggregate(Arrays.asList( new Document("$unwind", "$views"), new Document("$match", new Document("views.isActive", true)), new Document("$sort", new Document("views.date", 1)), new Document("$limit", 200), new Document("$project", new Document("_id", 0) .append("url", "$views.url") .append("date", "$views.date")) ));
다음과 같이 우리는 위의 코드를 다시 작성할 수 있습니다;
import static com.mongodb.client.model.Aggregates.*; AggregateIterable output = collection.aggregate(Arrays.asList( unwind("$views"), match(new Document("views.isActive",true)), sort(new Document("views.date",1)), limit(200), project(new Document("_id",0) .append("url","$views.url") .append("date","$views.date")) ));
물론, 당신이 해당 정적 가져 오기를해야합니다하지만 그 이상, 두 번째 예제의 코드가 청소기, 안전이 더 읽기 및 IMO 더 아름다운, (당신은 사업자 자신의 모든 시간을 입력하지 않는 한).
-
==============================
3.가이드로 앞의 예를 사용하여, 여기 몽고 드라이버 3를 사용하여 수행하는 방법은 다음과 같습니다
가이드로 앞의 예를 사용하여, 여기 몽고 드라이버 3를 사용하여 수행하는 방법은 다음과 같습니다
MongoCollection<Document> collection = database.getCollection("myCollection"); AggregateIterable<Document> output = collection.aggregate(Arrays.asList( new Document("$unwind", "$views"), new Document("$match", new Document("views.isActive", true)) )); for (Document doc : output) { ... }
-
==============================
4.여기 departmentId에 의해 직원을 계산하는 간단한 방법입니다 .. 자바 API를 사용하여 집계 :에서 세부 사항
여기 departmentId에 의해 직원을 계산하는 간단한 방법입니다 .. 자바 API를 사용하여 집계 :에서 세부 사항
Map<Long, Integer> empCountMap = new HashMap<>(); AggregateIterable<Document> iterable = getMongoCollection().aggregate(Arrays.asList( new Document("$match", new Document("active", Boolean.TRUE) .append("region", "India")), new Document("$group", new Document("_id", "$" + "deptId").append("count", new Document("$sum", 1))))); iterable.forEach(new Block<Document>() { @Override public void apply(final Document document) { empCountMap.put((Long) document.get("_id"), (Integer) document.get("count")); } });
from https://stackoverflow.com/questions/31643109/mongodb-aggregation-with-java-driver by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게 글래스 피쉬에 제 3 자 라이브러리를 사용 하는가? (0) | 2019.12.18 |
---|---|
[MONGODB] MongoDB를 PHP의 UTF-8 문제 (0) | 2019.12.18 |
[MONGODB] 캔트 사용 몽고 명령, 쇼는 맥을 찾을 수 없습니다] 명령 (0) | 2019.12.18 |
[MONGODB] 몽고와 배열 객체의 필드에 대한 쿼리? (0) | 2019.12.17 |
[MONGODB] "인덱스에 너무 큰 키를", MongoDB를에 인덱스를 만들 수 없습니다 (0) | 2019.12.17 |