[MONGODB] 방법 그룹 푸시을 제한하는 MongoDB를 집계 파이프 라인
MONGODB방법 그룹 푸시을 제한하는 MongoDB를 집계 파이프 라인
나는 집계 파이프 라인을 가진 그룹 기능에 밀어 요소의 양을 제한 할 수 없습니다입니다. 이것이 가능한가? 작은 예 :
데이터:
[
{
"submitted": date,
"loc": {
"lng": 13.739251,
"lat": 51.049893
},
"name": "first",
"preview": "my first"
},
{
"submitted": date,
"loc": {
"lng": 13.639241,
"lat": 51.149883
},
"name": "second",
"preview": "my second"
},
{
"submitted": date,
"loc": {
"lng": 13.715422,
"lat": 51.056384
},
"name": "nearpoint2",
"preview": "my nearpoint2"
}
]
여기 내 통합 파이프 라인은 다음과 같습니다
var pipeline = [{
//I want to limit the data to a certain area
$match: {
loc: {
$geoWithin: {
$box: [
[locBottomLeft.lng, locBottomLeft.lat],
[locUpperRight.lng, locUpperRight.lat]
]
}
}
}
},
// I just want to get the latest entries
{
$sort: {
submitted: -1
}
},
// I group by name
{
$group: {
_id: "$name",
< --get name
submitted: {
$max: "$submitted"
},
< --get the latest date
locs: {
$push: "$loc"
},
< --push every loc into an array THIS SHOULD BE LIMITED TO AN AMOUNT 5 or 10
preview: {
$first: "$preview"
}
}
},
//Limit the query to at least 10 entries.
{
$limit: 10
}
];
어떻게 10 또는 다른 크기로 LOCS 배열을 제한 할 수 있습니다? 나는 $ 각각 $ 슬라이스 뭔가를 시도했지만 그 작동하지 않습니다.
해결법
-
==============================
1.왼쪽 하단의 좌표를 가정하고 우측 상단 좌표를 [0, 0] 및 [100, 100] 각각이다. MongoDB를 3.2에서 당신은 당신이 원하는 어떤 배열의 하위 집합을 반환하는 $ 슬라이스 연산자를 사용할 수 있습니다.
왼쪽 하단의 좌표를 가정하고 우측 상단 좌표를 [0, 0] 및 [100, 100] 각각이다. MongoDB를 3.2에서 당신은 당신이 원하는 어떤 배열의 하위 집합을 반환하는 $ 슬라이스 연산자를 사용할 수 있습니다.
db.collection.aggregate([ { "$match": { "loc": { "$geoWithin": { "$box": [ [0, 0], [100, 100] ] } }} }}, { "$group": { "_id": "$name", "submitted": { "$max": "$submitted" }, "preview": { "$first": "$preview" } "locs": { "$push": "$loc" } }}, { "$project": { "locs": { "$slice": [ "$locs", 5 ] }, "preview": 1, "submitted": 1 }}, { "$limit": 10 } ])
-
==============================
2.당신은 $ 푸시 직접 $ 슬라이스 연산자를 전달하여이 작업을 수행 할 수 있습니다.
당신은 $ 푸시 직접 $ 슬라이스 연산자를 전달하여이 작업을 수행 할 수 있습니다.
var pipeline = [{ //I want to limit the data to a certain area $match: { loc: { $geoWithin: { $box: [ [locBottomLeft.lng, locBottomLeft.lat], [locUpperRight.lng, locUpperRight.lat] ] } } } }, // I just want to get the latest entries { $sort: { submitted: -1 } }, // I group by name { $group: { _id: "$name", < --get name submitted: { $max: "$submitted" }, < --get the latest date locs: { $push: { $slice: 10 } }, < --push every loc into an array THIS SHOULD BE LIMITED TO AN AMOUNT 5 or 10 preview: { $first: "$preview" } } }, //Limit the query to at least 10 entries. { $limit: 10 } ];
from https://stackoverflow.com/questions/24594049/mongodb-aggregation-pipeline-how-to-limit-a-group-push by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 지원 소수점 형식을 떠 있습니까? (0) | 2019.12.15 |
---|---|
[MONGODB] MongoDB의 한 업데이트 호출에 두 개의 분리 된 배열로 밀어 (0) | 2019.12.15 |
[MONGODB] Node.js를 - 몽구스 - 점검 모음이있는 경우 (0) | 2019.12.15 |
[MONGODB] 어떻게 몽고 문서에 중첩 된 필드의 데이터 유형을 변경하려면? (0) | 2019.12.15 |
[MONGODB] 몽고와 동시에 풀과 addtoset (0) | 2019.12.15 |