programing

MongoDB 고유의 집약

easyjava 2023. 4. 4. 23:22
반응형

MongoDB 고유의 집약

각 주에 가장 많은 지퍼가 있는 도시를 찾기 위해 조사를 진행 중입니다.

db.zips.distinct("state", db.zips.aggregate([ 
    { $group:
      { _id: {
           state: "$state", 
           city: "$city" 
         },
        numberOfzipcodes: { 
           $sum: 1
         }
      }
    }, 
    { $sort: {
        numberOfzipcodes: -1
         }
      }
  ])
)

쿼리의 집약 부분은 정상적으로 동작하고 있는 것처럼 보이지만, 구별을 추가하면 빈 결과가 나타납니다.

ID에 상태가 있기 때문인가요?내가 할 수 있는 건distinct("_id.state?

$addToSet을 집약 프레임워크와 함께 사용하여 개별 개체를 셀 수 있습니다.

예를 들어 다음과 같습니다.

db.collectionName.aggregate([{
    $group: {_id: null, uniqueValues: {$addToSet: "$fieldName"}}
}])

또는 null_id 레코드 내의 하위 문서가 아닌 적절한 목록에 고유 값을 가져오기 위해 확장됩니다.

db.collectionName.aggregate([
    { $group: {_id: null, myFieldName: {$addToSet: "$myFieldName"}}},
    { $unwind: "$myFieldName" },
    { $project: { _id: 0 }},
])

구별되는 프레임워크와 집약 프레임워크는 상호 운용할 수 없습니다.

그 대신, 다음과 같은 것이 필요합니다.

db.zips.aggregate([ 
    {$group:{_id:{city:'$city', state:'$state'}, numberOfzipcodes:{$sum:1}}}, 
    {$sort:{numberOfzipcodes:-1}},
    {$group:{_id:'$_id.state', city:{$first:'$_id.city'}, 
              numberOfzipcode:{$first:'$numberOfzipcodes'}}}
]);

SQL 쿼리: (그룹별 및 고유 수)

select city,count(distinct(emailId)) from TransactionDetails group by city;

동등한 mongo 쿼리는 다음과 같습니다.

db.TransactionDetails.aggregate([ 
{$group:{_id:{"CITY" : "$cityName"},uniqueCount: {$addToSet: "$emailId"}}},
{$project:{"CITY":1,uniqueCustomerCount:{$size:"$uniqueCount"}} } 
]);

전화하시면 됩니다.$setUniondups도 필터링할 수 있습니다.

{ $project: {Package: 1, deps: {'$setUnion': '$deps.Package'}}}

언급URL : https://stackoverflow.com/questions/16368638/mongodb-distinct-aggregation

반응형