공부 흔적남기기

MongoTemplate in 순서대로 가져오기 본문

데이터베이스/MongoDB

MongoTemplate in 순서대로 가져오기

65살까지 코딩 2022. 7. 15. 22:29
728x90
반응형

코드를 짜는중 데이터베이스 접근해서 In절로 데이터를 가져오되 In절에 담긴 순서대로 데이터를 가져오고 싶었습니다.

여러 구글링 합쳐본 결과 aggregation을 통해서 해결할 수 있었습니다.

방식을 먼저 설명하면
match 를 통해 데이터를 찾오고 

addField와 IndexOfArray를 이용하여 order라는 attribute를 하나더 만들어 줍니다.

생긴 order을 이용하여 Sort를 하여 가져오면 됩니다.

fun getData(list: MutableList<String>): List<AssetAttribute> {
        val match = match(Criteria.where("_id").`in`(list))
        val addField = addFields().addField("_order").withValueOf(IndexOfArray.arrayOf(list).indexOf("\$_id")).build()
        val sort = sort(Sort.Direction.ASC, "_order")
        return mongoTemplate.aggregate(newAggregation(match, addField, sort), "test", Entity::class.java).mappedResults
 }
728x90
반응형