簡體   English   中英

Mongodb Group 並從文檔中獲取其他字段

[英]Mongodb Group and get other fields from documents

更新以便 Mohammad Faisal 擁有最佳解決方案。但是,當添加新文檔時它會中斷,哈哈! 所以我從他的代碼中學到了很多東西並修改了它,它有效! =) 代碼一直在底部。

但這是我說的.. 所以我有這個文件

{"_id":"5ddea2e44eb407059828d740",
"projectname":"wdym",
"username":"easy",
"likes":0,
"link":["ssss"]
}


{"_id":"5ddea2e44eb407059822d740",
"projectname":"thechosenone",
"username":"easy",
"likes":30,
"link":["ssss"]
}

{"_id":"5ddea2e44eb407059828d740",
"projectname":"thanos",
"username":"wiley",
"likes":10,
"link":["ssss"]
}

基本上我想要的是包含最高贊及其相關項目名稱的文檔

例如,輸出將是

"projectname":"thechosenone",
"username":"easy",
"likes":30
}
,
{
"projectname":"thanos",
"username":"wiley",
"likes":10,
}

我的代碼如下

db
    .collection("projects")
    .aggregate([
      {
        $group: {
          _id: { username: "$username" },
          likes: { $max: "$likes" }
        }
      },
      {
        $project:{projectname:1}
      }
    ])

$project 給了我一個奇怪的輸出。 但是,沒有 $project 的輸出是正確的。 但我想投射項目名稱、用戶和最高贊。 謝謝你聽我說:)

繼承人的解決方案=)

db
    .collection("projects")
    .aggregate([
      {
        $sort: {
          likes: -1
        }
      },
      {
        $group: {
          _id: {
            username: "$username"
          },
          likes: {
            $max: "$likes"
          },
          projectname: {
            $push: "$projectname"
          },
          link: {
            $push: "$link"
          }
        }
      },
      {
        $project: {
          username: "$_id.username",
          projectname: {
            $arrayElemAt: ["$projectname", 0]
          },
          link: {
            $arrayElemAt: ["$link", 0]
          }
        }
      }
    ])
    .toArray()

如果您不必使用 $group 這將解決您的問題:

db.projects.aggregate([
  {$sort:{likes:-1}},
  {$limit:1} 
]).pretty()

結果是

{
  "_id" : ObjectId("5ddee7f63cee7cdf247059db"),
  "projectname" : "thechosenone",
  "username" : "easy",
  "likes" : 30,
  "links" : ["ssss"]
}

嘗試這個:-

db.collection("projects").aggregate([
  {
    $group: {
      _id: { username: "$username" },
      likes: { $max: "$likes" },
      projectname: { $push : { $cond: [  { $max: "$likes" }, "$projectname", "" ]}}
    }
  }
  ,
  {
    $project:{
       username:"$_id.username",
       projectname:{"$reduce": {
            "input": "$projectname",
            "initialValue": { "$arrayElemAt": ["$projectname", 0] },
            "in": { "$cond": [{ "$ne": ["$$this", ""] }, "$$this", "$$value"] }
        }},
       likes:1
    }
  }
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM