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

Javascript Mongodb组并从文档中获取其他字段,javascript,mongodb,Javascript,Mongodb,更新,让Mohammad Faisal有最好的解决方案。但是当添加新文档时,它会中断lol!因此,我从他的代码中学到了很多,并对其进行了修改,使其生效!=)代码一直在底部 但我是这么说的。。 所以我有这个文件 {"_id":"5ddea2e44eb407059828d740", "projectname":"wdym", "username":"easy", "likes":0, "link":["ssss"] } {"_id":"5ddea2e44eb407059822d740", "pr

更新,让Mohammad Faisal有最好的解决方案。但是当添加新文档时,它会中断lol!因此,我从他的代码中学到了很多,并对其进行了修改,使其生效!=)代码一直在底部

但我是这么说的。。 所以我有这个文件

{"_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,
}
{
  "_id" : ObjectId("5ddee7f63cee7cdf247059db"),
  "projectname" : "thechosenone",
  "username" : "easy",
  "likes" : 30,
  "links" : ["ssss"]
}
我的代码如下

db
    .collection("projects")
    .aggregate([
      {
        $group: {
          _id: { username: "$username" },
          likes: { $max: "$likes" }
        }
      },
      {
        $project:{projectname:1}
      }
    ])
$project给了我一个奇怪的输出。然而, 没有$project,输出是正确的。 但是我想投射projectname、用户和最喜欢的人。谢谢你听我说:)

这是解决方案=)


如果您不必使用$group,这将解决您的问题:

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

"projectname":"thechosenone",
"username":"easy",
"likes":30
}
,
{
"projectname":"thanos",
"username":"wiley",
"likes":10,
}
{
  "_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
    }
  }
])

嘿,谢谢你的解决方案。但是现在这个代码还有一个问题。如果有一个文档被修改或添加,它只引用最后一个数组/嘿,多亏了你,我修改了你的解决方案``[{'$sort':{'likes':-1},{'$group':{''uid':{'username':'$username'},'likes':{'$max':'$likes'},'projectname':{'$push':'$projectname'},'link':{'$push':'$link},{'$project':{'username':'$\u id.username','projectname':{'$arrayElemAt':['$projectname',0]},]