반응형
Mongodb 정렬 내부 배열
저는 지금 한참 동안 찾고 있는데 내부 배열을 분류하여 현재 작업 중인 문서에 보관할 수 없는 것 같습니다.
{
"service": {
"apps": {
"updates": [
{
"n" : 1
"date": ISODate("2012-03-10T16:15:00Z")
},
{
"n" : 2
"date": ISODate("2012-01-10T16:15:00Z")
},
{
"n" : 5
"date": ISODate("2012-07-10T16:15:00Z")
}
]
}
}
}
그래서 저는 서비스로 반환되는 항목을 유지하면서 업데이트 배열을 정렬하고 싶습니다.지금까지 나는 껍데기를 가지고 있습니다.
db.servers.aggregate(
{$unwind:'$service'},
{$project:{'service.apps':1}},
{$unwind:'$service.apps'},
{$project: {'service.apps.updates':1}},
{$sort:{'service.apps.updates.date':1}});
이 일을 도와줄 사람?
이 작업을 수행할 수 있습니다.$unwind
ing theupdates
배열, 결과 문서 정렬 기준date
,그리고 나서.$group
그들을 다시 연결하는 것_id
정렬된 순서를 사용합니다.
db.servers.aggregate(
{$unwind: '$service.apps.updates'},
{$sort: {'service.apps.updates.date': 1}},
{$group: {_id: '$_id', 'updates': {$push: '$service.apps.updates'}}},
{$project: {'service.apps.updates': '$updates'}})
시작 위치Mongo 4.4
집계 연산자는 사용자 정의 Javascript 함수를 적용하여 MongoDB 쿼리 언어에서 지원되지 않는 동작을 구현할 수 있습니다.
예를 들어, 필드 중 하나를 기준으로 개체 배열을 정렬하려면 다음과 같이 하십시오.
// {
// "service" : { "apps" : { "updates" : [
// { "n" : 1, "date" : ISODate("2012-03-10T16:15:00Z") },
// { "n" : 2, "date" : ISODate("2012-01-10T16:15:00Z") },
// { "n" : 5, "date" : ISODate("2012-07-10T16:15:00Z") }
// ]}}
// }
db.collection.aggregate(
{ $set: {
{ "service.apps.updates":
{ $function: {
body: function(updates) {
updates.sort((a, b) => a.date - b.date);
return updates;
},
args: ["$service.apps.updates"],
lang: "js"
}}
}
}
)
// {
// "service" : { "apps" : { "updates" : [
// { "n" : 2, "date" : ISODate("2012-01-10T16:15:00Z") },
// { "n" : 1, "date" : ISODate("2012-03-10T16:15:00Z") },
// { "n" : 5, "date" : ISODate("2012-07-10T16:15:00Z") }
// ]}}
// }
이렇게 하면 비용이 많이 드는 조합을 적용할 필요 없이 어레이를 수정할 수 있습니다.$unwind
,$sort
그리고.$group
단상들
$function
세 가지 매개 변수를 사용합니다.
body
매개 변수가 수정할 배열인 적용할 함수입니다.args
여기에는 레코드의 필드가 포함되어 있습니다.body
함수는 매개 변수로 사용됩니다.우리의 경우에는"$service.apps.updates"
.lang
그것이 그 언어입니다.body
함수가 작성되었습니다.오직.js
현재 사용할 수 있습니다.
시작 위치Mongo 5.2
새로운 집계 연산자의 정확한 사용 사례입니다.
// {
// service: { apps: { updates: [
// { n: 1, date: ISODate("2012-03-10") },
// { n: 2, date: ISODate("2012-01-10") },
// { n: 5, date: ISODate("2012-07-10") }
// ]}}
// }
db.collection.aggregate([
{ $set: {
"service.apps.updates": {
$sortArray: {
input: "$service.apps.updates",
sortBy: { date: 1 }
}
}
}}
])
// {
// service: { apps: { updates: [
// { n: 2, date: ISODate("2012-01-10") },
// { n: 1, date: ISODate("2012-03-10") },
// { n: 5, date: ISODate("2012-07-10") }
// ]}}
// }
다음 항목:
- 분류(
$sortArray
) 그service.apps.updates
배열(input: "$service.apps.updates"
) - 에 정렬을 적용함으로써.
date
s(sortBy: { date: 1 }
) - 고가의 조합을 적용할 필요 없이
$unwind
,$sort
그리고.$group
단계들
언급URL : https://stackoverflow.com/questions/15388127/mongodb-sort-inner-array
반응형
'sourcecode' 카테고리의 다른 글
오류 TS2318: 글로벌 유형 '개체'를 찾을 수 없습니다. (0) | 2023.06.08 |
---|---|
sqlite 쿼리에서 딕트를 가져오려면 어떻게 해야 합니까? (0) | 2023.06.08 |
오더ByChild가 Firebase에서 작동하지 않음 (0) | 2023.06.08 |
jQuery를 사용하여 뷰포트 크기 가져오기 (0) | 2023.06.03 |
iPhone/iPad 장치에서 사용 가능/사용 가능한 총 디스크 공간을 검색하는 방법은 무엇입니까? (0) | 2023.06.03 |