[MONGODB] MongoDB의의 CONCAT의 INT 및 문자열
MONGODBMongoDB의의 CONCAT의 INT 및 문자열
나는 50 mb 및 더 큰 크기와 내 컬렉션에 내 모든 파일을 파일 이름과 파일 크기를 투영하려고 노력하지만,있어 내가 할 수없는 것이 지능의 유형이 같은 유형의 파일 크기 CONCAT
나는 투사가되고 싶어
{
"result" : [
{
"_id" : ObjectId("5652c399a21dad0bb01b6308"),
"FileName" : "1234567890.xml",
"FileSize" : "11.06 MB"
},
{
"_id" : ObjectId("5652c399a21dad0bb01b630f"),
"FileName" : "2468101214.xml",
"FileSize" : "320.48 MB"
},
{
"_id" : ObjectId("5652c399a21dad0bb01b631f"),
"FileName" : "3691215180.xml",
"FileSize" : "12.95 MB"
}
}
그러나 지금까지 나는 오직 다음을 반환 할 수 있습니다
{
"result" : [
{
"_id" : ObjectId("5652c399a21dad0bb01b6308"),
"FileName" : "1234567890.xml",
"FileSize" : 11.0610504150390630
},
{
"_id" : ObjectId("5652c399a21dad0bb01b630f"),
"FileName" : "2468101214.xml",
"FileSize" : 320.4827098846435500
},
{
"_id" : ObjectId("5652c399a21dad0bb01b631f"),
"FileName" : "3691215180.xml",
"FileSize" : 12.9519605636596680
}
}
내 쿼리 :
db.MyCollection.aggregate(
// Pipeline
[
// Stage 1
{
$match: {
FileSize: {$gte: 5000000}
}
},
// Stage 2
{
$project: {
FileName: 1,
FileSize: {$divide: ["$FileSize", 1048576]}
}
},
// Stage 3
{
$project:{
FileName:1,
FileSize:{$concat:["$FileSize", "MB"]}
}
}
어떻게 파일 크기와 "MB"필드 CONCAT합니까?
해결법
-
==============================
1.여기에 트릭은 문자열 및 소수점 정밀도를 처리 할 수있는 몇 가지 작은 엑스트라로 변환을 수행하기 위해 $ SUBSTR을 사용하는 것입니다 :
여기에 트릭은 문자열 및 소수점 정밀도를 처리 할 수있는 몇 가지 작은 엑스트라로 변환을 수행하기 위해 $ SUBSTR을 사용하는 것입니다 :
{ "$project": { "FileName": 1, "FileSize": { "$concat": [ { "$substr": [ { "$subtract": [ "$FileSize", { "$mod": [ "$FileSize", 1 ] }]}, 0, -1 ]}, { "$substr": [ { "$mod": [ "$FileSize", 1 ] }, 1, 3] }, " MB", ] } }}
또는 더 나은 아직, 긴 필요한 경우에 또는, MongoDB를 2.6보다 이후 버전에서 보자 $의 도움으로 하나, 하나의 $ 프로젝트에 결합한다. 단일 파이프 라인 단계는이보다 더 효율적입니다 :
{ "$project": { "FileName": 1, "FileSize": { "$let": { "vars": { "FileSize": { "$divide": [ "$FileSize", 1048576 ] } }, "in":{ "$concat": [ { "$substr": [ { "$subtract": [ "$$FileSize", { "$mod": [ "$$FileSize", 1 ] }]}, 0, -1 ]}, { "$substr": [ { "$mod": [ "$$FileSize", 1 ] }, 1, 3] }, " MB", ] } } } }}
그러니 당신이 ($ 모드를 통해) 소수점의 수를 헤어대로 인해 임의 길이의 숫자를 다루는 문자열의 나머지 부분에 "길이"인수를 던질 수 있습니다. $ 모드 두 개의 소수 자릿수에 문자열의 길이의 사용으로 분리 된 "나머지"로 항상 "세", 선도적 인 0을 생략하기 위해 두 번째 위치에서 물론 시작.
당신이 질문을 정확하게 반환 값 :
{ "_id" : ObjectId("5652c399a21dad0bb01b6308"), "FileName" : "1234567890.xml", "FileSize" : "11.06 MB" } { "_id" : ObjectId("5652c399a21dad0bb01b630f"), "FileName" : "2468101214.xml", "FileSize" : "320.48 MB" } { "_id" : ObjectId("5652c399a21dad0bb01b631f"), "FileName" : "3691215180.xml", "FileSize" : "12.95 MB" }
-
==============================
2.단계 2.5 추가 : P를
단계 2.5 추가 : P를
{ $project:{ FileName:1, FileSize:{$substr:["$FileSize", 0, -1 ]} } }
파일 크기는 정수와 문자열로 변환 할 작업은 없습니다. 당신이 해킹 사용할 수 있으며, 사용 SUBSTR가 시작하는 문자열에 0을 변환하고 그래서 -1 문자열의 휴식.
-
==============================
3.그것은 문자열 값을 변환 $의 toString 연산자를 사용하여 MongoDB를 버전 4.0에서 지금 가능하다 :
그것은 문자열 값을 변환 $의 toString 연산자를 사용하여 MongoDB를 버전 4.0에서 지금 가능하다 :
db.col.aggregate([ { $project: { FileSize: { $concat: [ { $toString: "$FileSize" }, " MB" ] } } } ])
from https://stackoverflow.com/questions/33891511/mongodb-concat-int-and-string by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의에서 $ 조회 여러 컬렉션에 참여하는 방법 (0) | 2020.02.22 |
---|---|
[MONGODB] MongoDB를 구별 어디 동일한 쿼리에서? (0) | 2020.02.21 |
[MONGODB] MongoDB를 복합 기본 키 (0) | 2020.02.06 |
[MONGODB] $ 슬라이스 연산자를 사용하여 배열의 마지막 요소를 얻을 수 있습니다 (0) | 2020.01.25 |
[MONGODB] MongoDB의 쉘에서 데이터베이스를 작성하지 (0) | 2020.01.18 |