삽질 한 내용을 여기 올린다.
내가 가지고 있는 데이터가 아래와 같다고 하자.
여기 data filed 에 있는 데이터를 " :: " 로 나눈 후,
아래처럼 나눠진 값들을 각각의 다른 필드명으로 넣고 싶었다.
이 방법을 찾기 위해 구글링을 엄청 해대었고 결국 찾아내었다...!!
일단 $split 을 이용하여 배열로 만든 후에, 배열의 각 값을 하나씩 가져와서 projection 시키는 방법이다.
아래 aggregate 쿼리를 사용하면 된다.
db.movielens.aggregate([
{
$project :
{
_id:0,
splits : { $split: ["$data", "::"] }
}
},
{
$project :
{
fst : { $arrayElemAt : ["$splits", 0] },
sec : { $arrayElemAt : ["$splits", 1] },
thrd : { $arrayElemAt : ["$splits", 2] },
frth : { $arrayElemAt : ["$splits", 3] }
}
}
])
$project 대신 혹은 아래처럼 $addFields 를 사용할 수 도 있겠다.
db.movielens.aggregate([
{
$project :
{
_id:0,
splits : { $split: ["$data", "::"] }
}
},
{
$addFields :
{
fst : { $arrayElemAt : ["$splits", 0] },
sec : { $arrayElemAt : ["$splits", 1] },
thrd : { $arrayElemAt : ["$splits", 2] },
frth : { $arrayElemAt : ["$splits", 3] }
}
}
])
MongoDB $addFields : https://docs.mongodb.com/manual/reference/operator/aggregation/addFields/index.html
movielens sample data : https://github.com/apache/spark/blob/master/data/mllib/als/sample_movielens_ratings.txt
'MongoDB' 카테고리의 다른 글
[MongoDB] import 속도 향상시키기 (0) | 2019.11.06 |
---|---|
[MongoDB] Docker 로 MongoDB 클러스터 구성하는 방법 (0) | 2019.11.06 |
[MongoDB] collection 이름에 " . " dot 이 들어가는 경우 (0) | 2019.07.09 |
[MongoDB] hashed, ranged 샤딩 하는 방법 (0) | 2019.07.09 |
[MongoDB] Sharding Chunk size 바꾸기 (0) | 2019.05.14 |