반응형
MongoDB 집계:고유 필드 카운트
저는 여러 결제처를 사용하는 계정을 식별하기 위해 집계를 작성하려고 합니다.일반적인 데이터는 다음과 같습니다.
{
account:"abc",
vendor:"amazon",
}
...
{
account:"abc",
vendor:"overstock",
}
이제 이와 유사한 계정 목록을 작성하려고 합니다.
{
account:"abc",
vendorCount:2
}
이것을 Mongo의 집계 프레임워크에서 어떻게 쓰겠습니까?
저는 $addToSet과 $unwind 연산자를 사용하여 이를 파악했습니다.
db.collection.aggregate([
{
$group: { _id: { account: '$account' }, vendors: { $addToSet: '$vendor'} }
},
{
$unwind:"$vendors"
},
{
$group: { _id: "$_id", vendorCount: { $sum:1} }
}
]);
누군가에게 도움이 되길 바랍니다.
저는 당신이 긴장을 풀지 않는 다음과 같은 쿼리를 실행하는 것이 더 좋다고 생각합니다.
db.t2.insert({_id:1,account:"abc",vendor:"amazon"});
db.t2.insert({_id:2,account:"abc",vendor:"overstock"});
db.t2.aggregate([
{ $group : { _id : { "account" : "$account", "vendor" : "$vendor" }, number : { $sum : 1 } } },
{ $group : { _id : "$_id.account", number : { $sum : 1 } } }
]);
다음과 같은 결과가 예상됩니다.
{ "_id" : "abc", "number" : 2 }
사용할 수 있습니다.sets
db.test.aggregate([
{$group: {
_id: "$account",
uniqueVendors: {$addToSet: "$vendor"}
}},
{$project: {
_id: 1,
vendorsCount: {$size: "$uniqueVendors"}
}}
]);
나는 누군가가 왜 사용해야 하는지 모르겠어요.$group
두번이라.
db.collection.aggregate([ { $group: { "_id": "$account", "number": { $sum: 1 } } } ])
이 접근 방식은 $unwind 및 기타 추가 작업을 사용하지 않습니다.또한 집계에 새로운 항목을 추가해도 아무런 영향을 미치지 않습니다.받아들여진 답변에 흠이 있습니다.$group에 누적된 다른 필드가 있으면 승인된 답변의 $unwind 단계에서 문제가 발생합니다.
db.collection.aggregate([{
"$group": {
"_id": "$account",
"vendors": {"$addToSet": "$vendor"}
}
},
{
"$addFields": {
"vendorCount": {
"$size": "$vendors"
}
}
}])
여러 결제 소스를 사용하는 계정 식별하기
- 그룹화를 사용하여 여러 계정 레코드의 데이터를 카운트하고 카운트가 있는 계정별로 결과를 그룹화합니다.
- 일치 사례 사용은 둘 이상의 결제 방법을 가진 계정만 필터링하는 것입니다.
db.payment_collection.aggregate([ { $group: {"_id":"$account" , "number":{$sum:1}} }, { "$match": { "number": { "$gt": 1 } } } ])
이건 완벽하게 잘 될 겁니다
db.UserModule.aggregate(
{ $group : { _id : { "companyauthemail" : "$companyauthemail", "email" : "$email" }, number : { $sum : 1 } } },
{ $group : { _id : "$_id.companyauthemail", number : { $sum : 1 } } }
);
예문
db.collection.distinct("example.item").forEach( function(docs) {
print(docs + "==>>" + db.collection.count({"example.item":docs}))
});
언급URL : https://stackoverflow.com/questions/18501064/mongodb-aggregation-counting-distinct-fields
반응형
'programing' 카테고리의 다른 글
마우스가 끝나면 버튼 색상 변경 (0) | 2023.05.29 |
---|---|
셸 스크립트에서 파일 이름 확장자를 제거하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
번들에서 'Main'이라는 이름의 스토리보드를 찾을 수 없습니다. (0) | 2023.05.29 |
CSS 부모 선택기가 있습니까? (0) | 2023.05.29 |
UI 내비게이션 컨트롤러에서 "뒤로" 버튼을 숨기는 방법은 무엇입니까? (0) | 2023.05.29 |