猿问

Mongodb Group 并从文档中获取其他字段

更新所以 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,输出是正确的。但我想投影项目名称、用户和最高点赞数。谢谢你听我说:)


ABOUTYOU
浏览 510回答 2
2回答

繁华开满天机

如果您不必使用 $group 这将解决您的问题:db.projects.aggregate([  {$sort:{likes:-1}},  {$limit:1} ]).pretty()结果是{  "_id" : ObjectId("5ddee7f63cee7cdf247059db"),  "projectname" : "thechosenone",  "username" : "easy",  "likes" : 30,  "links" : ["ssss"]}

www说

试试这个:-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    }  }])
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答