Springboot Embedded Mongo DB 이슈

$lookup 동작X

간단한 구조의 서브 도큐먼트일 경우 $lookup aggregation 파이프라인은 예상하는 결과를 출력 하지만,
배열에 속하는 멀티 서브 도큐먼트에서 $lookup aggregation 파이프라인은 예상과 다른 결과를 출력한다.

실행 환경

libversion
org.springframework.boot:spring-boot-starter-data-mongodb2.2.4
de.flapdoodle.embed:de.flapdoodle.embed.mongo2.2.0

발생조건

Collection: aa

db.aa.insert({"_id": 1, "name": "aa-name-1"});
db.aa.insert({"_id": 2, "name": "aa-name-2"});

Collection: bb

db.bb.insert({
  "_id": 1,
  "name": 'bb-name',
  "bb_subs": [
    { "sub-doc-id": "sub-document-1", "ref_id": 1 },
    { "sub-doc-id": "sub-document-2", "ref_id": 2 }
  ]
});

Aggregation query

db.bb.aggregate([
    {
        "$match":{
            "_id":1
        }
    },
    {
        "$lookup":{
            "from":"a",
            "localField":"bb_subs.ref_id",
            "foreignField":"_id",
            "as":"detail"
        }
    }
])

실행결과

{
    "_id" : 1.0,
    "name" : "bb-name",
    "bb_subs" : [ 
        {
            "sub-doc-id" : "sub-document-1",
            "ref_id" : 1.0
        }, 
        {
            "sub-doc-id" : "sub-document-2",
            "ref_id" : 2.0
        }
    ],
    "detail" : []
}

해결방법

Embedded MongoDB 버전을 특정 버전 이상으로 변경한다. (> 3.5.8)

spring:
  mongodb:
    embedded:
      version: 3.6.5

Springboot 2.2.4 기준으로 기본 버전3.5.5 버전
Embedded MongoDB 라이브러리에서 지원하는 버전은 de.flapdoodle.embed.mongo.distribution.Version 에서 확인할 수 있다

원인

MongoDB Bug (https://jira.mongodb.org/browse/SERVER-28717)
Fixed Version3.4.6, 3.5.8

태그: , ,

Back to Top ↑

댓글남기기