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