Mongodb 콘텐트 및 문자열
컬렉션에 있는 모든 파일의 크기가 50mb 이상인 파일에 대해 FileName 및 FileSize를 투영하려고 하지만 FileSize 유형이 Int 유형이기 때문에 일치할 수 없습니다.
나는 그 투영이
{
"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" 필드를 일치시키려면 어떻게 해야 합니까?
2.5단계 추가 :P
{
$project:{
FileName:1,
FileSize:{$substr:["$FileSize", 0, -1 ]}
}
}
파일 크기는 정수이며 이를 문자열로 변환하는 작업이 없습니다.그래서 당신은 핵을 사용할 수 있고, 그것을 문자열로 변환하기 위해 서브스트를 사용할 수 있고, 시작할 때는 0이고, 나머지 문자열은 -1입니다.
여기서 요령은 문자열로 변환하는 데 사용하고 소수점 정밀도를 처리하기 위한 몇 가지 추가 기능을 사용하는 것입니다.
{ "$project": {
"FileName": 1,
"FileSize": {
"$concat": [
{ "$substr": [
{ "$subtract": [ "$FileSize", { "$mod": [ "$FileSize", 1 ] }]},
0,
-1
]},
{ "$substr": [ { "$mod": [ "$FileSize", 1 ] }, 1, 3] },
" MB",
]
}
}}
또는 하나로 결합하는 것이 더 낫습니다.$project
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",
]
}
}
}
}}
따라서 소수점(를 통해)에서 숫자를 나누기만 하면 나머지 문자열에 "length" 인수를 던져 임의 길이의 숫자를 처리할 수 있습니다."나머지"는 다음과 같은 용도로 사용할 수 없습니다.$mod
소수점 이하 두 자리까지의 문자열 길이는 항상 "3"이며, 선행을 건너뛰기 위해 두 번째 위치부터 시작합니다.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"
}
이제 MongoDB v4.0에서 값을 문자열로 변환하는 $toString 연산자를 사용하여 가능합니다.
db.col.aggregate([
{
$project: {
FileSize: { $concat: [ { $toString: "$FileSize" }, " MB" ] }
}
}
])
언급URL : https://stackoverflow.com/questions/33891511/mongodb-concat-int-and-string
'programing' 카테고리의 다른 글
기기를 흔들었을 때 앱을 새로 고치는 방법은? (0) | 2023.07.25 |
---|---|
jQuery AJAX 루프 호출 (0) | 2023.07.25 |
numpy는 어떻게 사용하나요?어디서?제가 합격해야 하는 것은 무엇이고, 그 결과는 무엇을 의미합니까? (0) | 2023.07.20 |
for 루프에서 생성된 판다 데이터 프레임 추가 (0) | 2023.07.20 |
자바스크립트에서 동등한 Python Pandas (0) | 2023.07.20 |