Mongodb Mongoose按字段对嵌套数组排序
我有一个GameStatistics集合,我想对所有玩家按分数进行排序 所有玩家都列在带有游戏的嵌套Mongodb Mongoose按字段对嵌套数组排序,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我有一个GameStatistics集合,我想对所有玩家按分数进行排序 所有玩家都列在带有游戏的嵌套activePlayers数组中。每个玩家都有一个字段点(我在下面列出了代码和模式) 似乎我遗漏了一些东西,我已经尝试过使用aggregate()了,但也没有运气 sort=async(req:Request,res:Response,next:NextFunction)=>{ const id=“002190805”; const stats=await GameStats.findById(i
activePlayers
数组中。每个玩家都有一个字段点(我在下面列出了代码和模式)
似乎我遗漏了一些东西,我已经尝试过使用aggregate()了,但也没有运气
sort=async(req:Request,res:Response,next:NextFunction)=>{
const id=“002190805”;
const stats=await GameStats.findById(id)
.sort({“vTeam.activePlayers.points”:-1})
.exec();
返回res.status(200).json(stats);
};
集合如下所示:
[
{
"vTeam": {
"activePlayers": [
{
"teamId": "1610612759",
"firstName": "Lonnie",
"lastName": "Walker IV",
"points": "23",
"assists": "0",
"rebounds": "4",
"fgp": "40.0",
"to": "0",
"stl": "3",
"blk": "0"
},
{
"teamId": "1610612759",
"firstName": "LaMarcus",
"lastName": "Aldridge",
"points": "4",
"assists": "3",
"rebounds": "14",
"fgp": "45.0",
"to": "2",
"stl": "1",
"blk": "1"
}
]
},
"_id": "0021900805",
"createdAt": "2020-04-05T15:34:26.457Z",
"vTeamScore": "114"
}
]
根据您的解决方案,将1
替换为-1
所以:const stats=await GameStats.findById(id).sort({'vTeam.activePlayers.points':-1}).exec()代码>根据您的解决方案,将1
替换为-1
所以:const stats=await GameStats.findById(id).sort({'vTeam.activePlayers.points':-1}).exec()代码>您可以使用mongodb聚合框架来解决此问题
sort=async(req:Request,res:Response,next:NextFunction)=>{
const id=“002190805”;
const stats=等待GameStats.aggregate([
{
$match:{
_id:id,//或mongoose.Types.ObjectId(id)
},
},
{
$unwind:“$vTeam.activePlayers”,
},
{
$sort:{
“vTeam.activePlayers.points”:-1,
},
},
{
$group:{
_id:“$\u id”,
活动玩家:{
$push:“$vTeam.activePlayers”,
},
文件:{
$first:“$$ROOT”,
},
},
},
{
$replaceRoot:{
新根:{
$mergeObjects:[
“$doc”,
{
VTeamActivePlayer:“$ActivePlayer”,
},
],
},
},
},
{
$addFields:{
“vTeam.activePlayers”:“$vTeamActivePlayers”,
},
},
{
$项目:{
VTeamActivePlayer:0,
},
},
]);
返回res.status(200).json(stats);
};
您可以使用mongodb聚合框架来解决此问题
sort=async(req:Request,res:Response,next:NextFunction)=>{
const id=“002190805”;
const stats=等待GameStats.aggregate([
{
$match:{
_id:id,//或mongoose.Types.ObjectId(id)
},
},
{
$unwind:“$vTeam.activePlayers”,
},
{
$sort:{
“vTeam.activePlayers.points”:-1,
},
},
{
$group:{
_id:“$\u id”,
活动玩家:{
$push:“$vTeam.activePlayers”,
},
文件:{
$first:“$$ROOT”,
},
},
},
{
$replaceRoot:{
新根:{
$mergeObjects:[
“$doc”,
{
VTeamActivePlayer:“$ActivePlayer”,
},
],
},
},
},
{
$addFields:{
“vTeam.activePlayers”:“$vTeamActivePlayers”,
},
},
{
$项目:{
VTeamActivePlayer:0,
},
},
]);
返回res.status(200).json(stats);
};
是的,我知道。实际阵列要大得多。我对它进行了修改,以查看sort()是否会对任何内容进行排序(尽管它不会)。但是我忘了把它换回来是的,我知道。实际阵列要大得多。我对它进行了修改,以查看sort()是否会对任何内容进行排序(尽管它不会)。但是我忘了把它换回来