[MONGODB] 배열 요소에 의해 MongoDB를 정렬 문서
MONGODB배열 요소에 의해 MongoDB를 정렬 문서
나는 문서 구조 등이있다 :
{
map: 'A',
points: [
{
type: 'type1',
distanceToSpawn: 110
},
{
type: 'type4',
distanceToSpawn: 40
},
{
type: 'type6',
distanceToSpawn: 30
}
]
},
{
map: 'B',
points: [
{
type: 'type1',
distanceToSpawn: 100
},
{
type: 'type2',
distanceToSpawn: 60
},
{
type: 'type3',
distanceToSpawn: 25
}
]
},
{
map: 'C',
points: [
{
type: 'type2',
distanceToSpawn: 90
},
{
type: 'type3',
distanceToSpawn: 1
},
{
type: 'type6',
distanceToSpawn: 76
}
]
}
나는 포인트 형 타입 1을 가진 모든 맵이 오름차순으로 distanceToSpawn으로 분류 싶어.
예상 결과 :
{
map: 'B',
points: [
{
type: 'type1',
distanceToSpawn: 100
}
]
},
{
map: 'A',
points: [
{
type: 'type1',
distanceToSpawn: 110
}
]
}
내가 좋아하는 뭔가를 시도했다 :
db.maps.find({'points.type': {$eq : 'type1'}}, {map: 1, 'points.$':1}).sort({'points.distanceToSpawn': 1}).limit(10)
그러나이 일이 오름차순으로지도를 정렬하지.
감사.
해결법
-
==============================
1.당신은 배열 할 수 없어, 당신이 일치하는 요소에서 발생하는 "일종의"완 때문에 여기에 주요 문제입니다. 이 같은 결과를 정렬 할 경우 대신) (.aggregate를 사용해야합니다. 어느로 :
당신은 배열 할 수 없어, 당신이 일치하는 요소에서 발생하는 "일종의"완 때문에 여기에 주요 문제입니다. 이 같은 결과를 정렬 할 경우 대신) (.aggregate를 사용해야합니다. 어느로 :
현대 MongoDB의 버전 :
db.maps.aggregate([ { "$match": { "points.type": "type1" }}, { "$addFields": { "order": { "$filter": { "input": "$points", "as": "p", "cond": { "$eq": [ "$$p.type", "type1" ] } } } }}, { "$sort": { "order": 1 } } ])
MongoDB를 들어 2.6-3.0
db.maps.aggregate([ { "$match": { "points.type": "type1" }}, { "$project": { "points": { "$setDifference": ] { "$map": { "input": "$points", "as": "p", "in": { "$cond": [ { "$eq": [ "$$p.type", "$type1" ] }, "$$p", false ]} }}, [false] ] } }}, { "$sort": { "points.distanceToSpawn": 1 } } ])
이하 효율적으로 버전에서 MongoDB를 2.6 이전 :
db.maps.aggregate([ { "$match": { "points.type": "type1" }}, { "$unwind": "$points" }, { "$match": { "points.type": "type1" }}, { "$group": { "_id": "$id", "points": { "$push": "$points" } }}, { "$sort": { "points.ditanceToSpawn": 1 } } ])
즉, 올바른 요소와 일치하고는 "일종의"작업에서 고려가 할 수있는 유일한 방법입니다. 기본 커서 정렬은 그렇지 대신 선택 "유형"일치하지 않는 배열 요소의 필드 값을 고려할 것입니다.
from https://stackoverflow.com/questions/28889240/mongodb-sort-documents-by-array-elements by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 중첩 된 문서 MongoDB의에서 합계 (0) | 2019.12.14 |
---|---|
[MONGODB] 유성 방법 대 / 거부 규칙은 허용 (0) | 2019.12.14 |
[MONGODB] MongoDB를 집계 프레임 워크 | 여러 값을 통해 그룹? (0) | 2019.12.14 |
[MONGODB] MongoDB의에서 업데이트 문서의 수를 제한하는 방법 (0) | 2019.12.14 |
[MONGODB] 하나의 문에서 여러 몽고 업데이트 연산자? (0) | 2019.12.14 |