MongoDB SELECT 카운트 기준
나는 MongoDB를 가지고 놀면서 간단한 방법을 찾고 있다.
SELECT province, COUNT(*) FROM contest GROUP BY province
하지만 집계함수로는 알 수 없을 것 같아요.정말 이상한 그룹 구문을 사용해서 할 수 있어요
db.user.group({
"key": {
"province": true
},
"initial": {
"count": 0
},
"reduce": function(obj, prev) {
if (true != null) if (true instanceof Array) prev.count += true.length;
else prev.count++;
}
});
하지만 집계 기능을 사용하는 더 쉽고 빠른 방법이 있을까요?
이것은, 다음의 방법으로 간단하게 실시할 수 있습니다.
db.contest.aggregate([
{"$group" : {_id:"$province", count:{$sum:1}}}
])
집계 함수 결과에 따라 추가 작업이 필요합니다.마지막으로 저는 MongoDB의 결과에 기초한 Aggregate 기능 및 운영 솔루션을 찾았습니다.컬렉션이 있습니다.Request
필드 포함request, source, status, requestDate
.
단일 필드 그룹별 및 개수:
db.Request.aggregate([
{"$group" : {_id:"$source", count:{$sum:1}}}
])
여러 필드 그룹화 및 개수:
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}
])
여러 필드 그룹화 및 필드 정렬을 사용한 수:
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
{$sort:{"_id.source":1}}
])
여러 필드 그룹화 및 개수(수치 사용 시 정렬 포함):
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
{$sort:{"count":-1}}
])
그룹화할 열이 여러 개 필요한 경우 이 모형을 따르십시오.여기에서는 다음을 통해 카운트를 실시합니다.status
그리고.type
:
db.BusinessProcess.aggregate({
"$group": {
_id: {
status: "$status",
type: "$type"
},
count: {
$sum: 1
}
}
})
MongoDB 3.4부터는$sortByCount
집약
지정된 식 값에 따라 수신 문서를 그룹화한 다음 각 개별 그룹의 문서 수를 계산합니다.
https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
예를 들어 다음과 같습니다.
db.contest.aggregate([
{ $sortByCount: "$province" }
]);
또한 그룹을 제한해야 하는 경우 다음을 사용할 수 있습니다.
db.events.aggregate(
{$match: {province: "ON"}},
{$group: {_id: "$date", number: {$sum: 1}}}
)
이 유형의 쿼리는 저에게 효과가 있었습니다.
db.events.aggregate({$group: {_id : "$date", number: { $sum : 1} }} )
http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/ 를 참조해 주세요.
시작점Mongo 5.0
의 에일리어스로도 사용할 수 있습니다.{ $sum : 1 }
:
// { "province" : "Champagne-Ardenne" }
// { "province" : "Champagne-Ardenne" }
// { "province" : "Haute-Normandie" }
db.collection.aggregate([
{ $group: { _id: "$province", count: { $count: {} } } }
])
// { "_id" : "Champagne-Ardenne", "count" : 2 }
// { "_id" : "Haute-Normandie", "count" : 1 }
db.contest.aggregate([
{ $match:{.....May be some match criteria...}},
{ $project: {"province":1,_id:0}},
{ $sortByCount: "$province" }
],{allowDiskUse:true});
MongoDB에는 메모리에서의 정렬 조작이 32 MB로 제한되어 있습니다.allowDiskUse : true 이 옵션을 사용합니다.수백만 개의 데이터 앞에 이 쿼리를 표시하면 메모리에 없는 디스크 수준에서 정렬됩니다.MongoDB 집약 파이프라인에는 100MB 제한이 있으므로 $project를 사용하여 다음 파이프라인으로 흐르는 데이터를 줄이십시오.작은 데이터를 사용하는 경우 allowDiskUse 옵션을 사용할 필요가 없습니다.
Mongo shell 명령어는 나에게 효과가 있었습니다.
db.getCollection(<collection_name>).aggregate([{"$match": {'<key>': '<value to match>'}}, {"$group": {'_id': {'<group_by_attribute>': "$group_by_attribute"}}}])
언급URL : https://stackoverflow.com/questions/23116330/mongodb-select-count-group-by
'sourcecode' 카테고리의 다른 글
교차 도메인 POST 요청이 쿠키 Ajax Jquery를 전송하지 않습니다. (0) | 2023.03.15 |
---|---|
AngularJs 사전에서 ng-repeat을 사용하는 방법 (0) | 2023.03.15 |
설정된 Y축 범위를 다시 차트화합니다. (0) | 2023.03.10 |
인텔리주 IDE 탑재 스프링 부트 핫스왑 (0) | 2023.03.10 |
spring-boot @Conditional OnClass의 구조 (0) | 2023.03.10 |