실제 숫자인 문자열 값을 기준으로 Mongo 정렬
다음과 같은 개체가 포함된 컬렉션이 있습니다.
{
"_id" : ObjectId("57f00cf47958af95dca29c0c"),
"id" : "...",
"threadId" : "...",
"ownerEmail" : "...@...",
"labelIds" : [
...
],
"snippet" : "...",
"historyId" : "35699995",
"internalDate" : "1422773000000",
"headers" : {
"from" : "...@...",
"subject" : "....",
"to" : "...@..."
},
"contents" : {
"html" : "...."
}
}
개체에 액세스할 때 정수여야 하는 iternalDate 값을 기준으로 정렬하고 싶지만 문자열입니다.이것들이 현이더라도 가져올 때 분류할 수 있는 방법이 있나요?알파벳순으로?아니면 고통 없이 정수로 변환할 수 있는 방법이 있습니까?
당신에게 필요한 것은 조합입니다.
db.collection.find()
.sort({internalDate: 1})
.collation({locale: "en_US", numericOrdering: true})
여기서 가장 좋은 해결책은 먼저 정수로 구문 분석하는 것입니다.노드에 mongodb 클라이언트를 사용하여 다음과 같은 Javascript의 간단한 스크립트를 사용하여 이 작업을 수행할 수 있습니다.
db.collection.find({}, {internalDate: 1}).forEach(function(doc) {
db.collection.update(
{ _id: doc._id },
{ $set: { internalDate: parseInt(doc.internalDate) } }
)
})
집계 방법을 사용하여 실제 문자열인 숫자를 정렬할 수도 있습니다.
db.collection.aggregate([{
$sort : {
internalDate : 1
}
}], {
collation: {
locale: "en_US",
numericOrdering: true
}
});
서버 사이드 페이지에 mongoose-continate 패키지를 사용하고 있으므로 이 패키지를 사용하지 마십시오. 서버 사이드 페이지에 mongoose-continate-v2만 사용하십시오.nodejs 측을 위한 이 패키지
저는 이 문제를 겪고 있었습니다.문자열 길이를 사용하여 먼저 정렬한 다음 문자열처럼 저장된 숫자 값의 종류(예: "1", "100", "20", "3")를 1, 3, 29, 100처럼 정렬해야 합니다.
db.AllTours.aggregate([
{
$addFields : {
"MyStringValueSize" : { $strLenCP: "$MyValue" }
}
},
{
$sort : {
"MyStringValueSize" : 1,
"MyValue" : 1
}
}
]);
버전 4.0에는 문자열을 구문 분석한 다음 정렬하는 데 사용할 수 있는 $toInt라는 새로운 기능이 있습니다.저의 경우 3.6에서 업그레이드할 수 없습니다.
종합적으로 말하면, 이것은 저에게 효과가 있습니다.
db.collection.aggregate([<pipeline>]).collation({locale:"en_US", numericOrdering:true})
이것이 나의 해결책이고 나에게 효과가 있었습니다.
db.getCollection('myCollection').aggregate([
{
$project: {
newMonth: {
$cond: { if: {
$and: [
{$ne: ['$month', '10']},
{$ne: ['$month', '11']},
{$ne: ['$month', '12']},
]
}, then: {$concat: ['0', '$month']}, else: '$month' }
}
}
},
{
$sort: {newMonth: -1}
}
])
언급URL : https://stackoverflow.com/questions/39815265/mongo-sort-by-string-value-that-is-actually-number
'programing' 카테고리의 다른 글
java.sql.SQL 예외:사용된 결과 집합 (0) | 2023.07.10 |
---|---|
SQL Server GUID 정렬 알고리즘입니다. 왜죠? (0) | 2023.07.10 |
'시스템'입니다.웹. 보안.SqlMembershipProvider'에는 스키마 버전 '1'과(와) 호환되는 데이터베이스 스키마가 필요합니다. (0) | 2023.07.10 |
마지막 태그 이후 모든 Git 커밋 가져오기 (0) | 2023.07.10 |
장고에서 사용자가 특정 그룹에 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.07.10 |