[컴] java driver 를 사용하는 경우, mongodb 에서 $merge 를 하면, resturn 이 오지 않게 하는 방법

 

reactor stream return nothing when merge / mongodb / mongo $merge 에서 결과가 너무 많이 온다.

java driver 에서 mongo $merge 를 하면, resturn 이 오지 않게 하는 방법

java driver(Reactor) 를 사용하는 경우, aggregation 마지막에 $merge 를 사용하면, return 으로 collection 내용을 전부 가져온다. ref. 2 에 적힌 issue 를 보면, backward compatibility 때문인듯 하다.(대충봐서 불확실)

방법은 다음과 같다.

MongoClient client = MongoClients.create("mongodb://localhost:27017");
MongoDatabase database = client.getDatabase("my-collection");
MongoCollection<Document> model = database.getCollection(collectionName);

val bsonListOfAggregationPipeline = listOf(Document(), ...)
AggregateIterable<Document> aggregateResult = model.aggregate(bsonListOfAggregationPipeline);

aggregateIterable.toCollection(); // 이렇게 하면 결과로 empty 가 온다.

aggregateIterable.toCollection()$out, $merge 에서만 사용가능한 듯 하다. ref. 3, ref. 4 참고

Reference

  1. java - Spring Data MongoDB: MergeOperation returns the whole collection. Why? - Stack Overflow
  2. java - Execute MongoTemplate.aggregate without row retrival - Stack Overflow
  3. spring-data-mongodb/MongoTemplate.java at 56115a263c77396700031540c1f4a2522220e0cd · spring-projects/spring-data-mongodb · GitHub
  4. AggregatePublisher (driver-reactive-streams 4.1.0 API)

댓글 없음:

댓글 쓰기