programing

mongoDB에서 그룹화하고 결과로 모든 필드를 반환하는 방법

bestprogram 2023. 5. 17. 23:31

mongoDB에서 그룹화하고 결과로 모든 필드를 반환하는 방법

mongoDB에서 aggregate 메서드를 사용하여 그룹화하고 있지만 사용할 때$group그룹화할 때 사용한 유일한 필드를 반환합니다.난 시도했다.$project하지만 그것도 작동하지 않습니다.저도 노력했습니다.$first작동했지만 결과 데이터의 형식이 다릅니다.

필요한 응답 형식은 다음과 같습니다.

{
    "_id" : ObjectId("5b814b2852d47e00514d6a09"),
    "tags" : [],
    "name" : "name here",
    "rating" : "123456789"
}

그리고 내 query.response에 $group을 추가한 후에는 _id의 값이 변경됩니다.(그리고 $group은 _id만 가져갑니다. 다른 키워드를 시도하면 무언가를 축적하는 오류가 발생합니다.이것도 설명해 주세요.)

{
    "_id" :"name here" //the value of _id changed to the name field which i used in $group condition
}

구조와 필드를 변경하지 않고 이름 필드의 중복 항목을 제거해야 합니다.또한 노드를 사용하고 있습니다.mongoose가 있는 JS, 이에 맞는 솔루션을 제공해주세요.

아래 집계 쿼리를 사용할 수 있습니다.

$$ROOT각 이름에 따라 전체 문서를 보관하고 다음을 수행합니다.$replaceRoot문서를 맨 위로 승격합니다.

db.col.aggregate([
  {"$group":{"_id":"$name","doc":{"$first":"$$ROOT"}}},
  {"$replaceRoot":{"newRoot":"$doc"}}
])

user2683814의 솔루션은 나에게 효과가 있었지만, 나의 경우, 우리가 새로운 루트 객체를 교체할 때 카운터 어큐뮬레이터가 있으며, 마지막 단계에서 카운트 필드가 누락되어 사용했습니다.$mergeObjects연산자가 내 카운트 필드를 다시 가져옵니다.

db.collection.aggregate([
 {
  $group: {
    _id: '$product',
    detail: { $first: '$$ROOT' },
    count: {
      $sum: 1,
    },
  },
},
{
  $replaceRoot: {
    newRoot: { $mergeObjects: [{ count: '$count' }, '$detail'] },
  },
}])

데이터베이스에서 데이터를 그룹화할 때 필요한 필드에 대해 누적된 작업을 수행하고 누적된 작업에 포함되지 않을 다른 필드는 다음과 같은 그룹으로 사용됩니다.

 db.collection.aggregate([{
 $group: {
   _id: { field1: "", field1: "" },
   acc: { $sum: 1 }
 }}]

여기서 _id 개체에는 보유할 다른 모든 필드가 포함됩니다.

당신의 데이터를 위해 당신은 이것을 시도할 수 있습니다.

db.collection.aggregate([{
    $group: {
        _id: "$name",
        rating: { $first: "$rating" },
        tags: { $first: "$tag" },
        docid: { $first: "$_id" }
    }
},
{
    $project: {
        _id: "$docid",
        name: "$_id",
        rating: 1,
        tags: 1
    }
}])

이 쿼리를 사용할 수 있습니다.

db.col.aggregate([
                        {"$group" : {"_id" : "$name","data" : {"$first" : "$$ROOT"}}},
                        {"$project" : {
                            "tags" : "$data.tags",
                            "name" : "$data.name",
                            "rating" : "$data.rating",
                            "_id" : "$data._id"
                            }
                        }])

저는 제 컬렉션을 다음 기준으로 그룹화하고 싶었습니다.groupById키를 사용하여 키 값 쌍으로 저장합니다.groupById그룹의 모든 항목으로서 가치를 평가합니다.

db.col.aggregate([{$group :{_id :"$groupById",newfieldname:{$push:"$"}}}]).pretty()

이것은 나에게 잘 작동합니다.

언급URL : https://stackoverflow.com/questions/52566913/how-to-group-in-mongodb-and-return-all-fields-in-result