반응형
그룹 수를 사용하여 $group 결과를 얻는 중
다음과 같은 구조를 가진 "posts"라는 컬렉션이 있다고 가정합니다(실제로는 더 복잡한 컬렉션이며, 게시물은 너무 단순합니다).
> db.posts.find()
{ "_id" : ObjectId("50ad8d451d41c8fc58000003"), "title" : "Lorem ipsum", "author" :
"John Doe", "content" : "This is the content", "tags" : [ "SOME", "RANDOM", "TAGS" ] }
저는 이 컬렉션이 태그별로 게시물을 조회하고 결과를 태그별로 그룹화하여 페이지화된 결과를 표시해야 하는 수십만 또는 수백만에 이를 것으로 예상합니다.여기서 통합 프레임워크가 필요합니다.aggregate() 메서드를 사용하여 컬렉션을 쿼리할 계획입니다.
db.posts.aggregate([
{ "$unwind" : "$tags" },
{ "$group" : {
_id: { tag: "$tags" },
count: { $sum: 1 }
} }
]);
페이지 관리자를 만들려면 출력 배열의 길이를 알아야 합니다.그러기 위해서는 다음과 같은 일을 할 수 있습니다.
db.posts.aggregate([
{ "$unwind" : "$tags" },
{ "$group" : {
_id: { tag: "$tags" },
count: { $sum: 1 }
} }
{ "$group" : {
_id: null,
total: { $sum: 1 }
} }
]);
그러나 그렇게 되면 이전 파이프라인(첫 번째 그룹)의 출력이 폐기됩니다.각 파이프라인의 출력을 유지하면서 두 작업을 결합할 수 있는 방법이 있습니까?전체 집계 작업의 출력이 일부 언어로 배열에 캐스트되어 내용이 계산될 수 있지만 파이프라인 출력이 16Mb 제한을 초과할 가능성이 있습니다.또한 카운트를 얻기 위해 동일한 쿼리를 수행하는 것은 낭비처럼 보입니다.
그래서 서류 결과와 카운트를 동시에 받는 것이 가능한가요?어떤 도움이든 감사합니다.
- 사용하다
$project
보호하기 위해tag
그리고.count
안으로tmp
- 사용하다
$push
또는addToSet
저장할tmp
당신의 것data
목록.
코드:
db.test.aggregate(
{$unwind: '$tags'},
{$group:{_id: '$tags', count:{$sum:1}}},
{$project:{tmp:{tag:'$_id', count:'$count'}}},
{$group:{_id:null, total:{$sum:1}, data:{$addToSet:'$tmp'}}}
)
출력:
{
"result" : [
{
"_id" : null,
"total" : 5,
"data" : [
{
"tag" : "SOME",
"count" : 1
},
{
"tag" : "RANDOM",
"count" : 2
},
{
"tag" : "TAGS1",
"count" : 1
},
{
"tag" : "TAGS",
"count" : 1
},
{
"tag" : "SOME1",
"count" : 1
}
]
}
],
"ok" : 1
}
모든 태그를 세는 것 외에는 집계 프레임워크가 필요한지 모르겠습니다. 예:
db.posts.aggregate(
{ "unwind" : "$tags" },
{ "group" : {
_id: { tag: "$tags" },
count: { $sum: 1 }
} }
);
태그별로 페이지를 표시하려면 다음과 같이 일반 쿼리 구문을 사용하면 됩니다.
db.posts.find({tags: "RANDOM"}).skip(10).limit(10)
언급URL : https://stackoverflow.com/questions/13529323/obtaining-group-result-with-group-count
반응형
'programing' 카테고리의 다른 글
단일 값 이벤트에 대한 Firebase 오프라인 기능 및 청취자 추가 (0) | 2023.07.02 |
---|---|
cshtml 파일에서 TypeScript 사용 (0) | 2023.07.02 |
비트 병합 충돌을 해결하기 위해 vimdiff를 어떻게 사용합니까? (0) | 2023.07.02 |
SQL Server의 "WITH SCHEMABINDING"의 단점은 무엇입니까? (0) | 2023.07.02 |
PHP에서 MySQL 데이터베이스 찾기/바꾸기 스크립트 작성 (0) | 2023.07.02 |