我有一个名为'Scores'的mongodb集合,集合中的输入格式为:
{ _id: ObjectId("5aa59c8411c5de25042a06fd"),
id: Y19rvB489or4mvtxAAAC,
score:2},{
_id: ObjectId("5aa59c8b11c5de25042a06fe"),
id: Y19rvB489or4mvtxAAAC,
score: 5},{
_id: ObjectId("5aa59c9511c5de25042a06ff"),
id: pkCJGv23JobXVAXRAAAE,
score:7},{
_id: ObjectId("5aa59d9f11c5de25042a0703"),
id: pkCJGv23JobXVAXRAAAE,
score:9},{
_id: ObjectId("5aa59d9411c5de25042a0701"),
id: fwCB0sJMCpsmN44ZAWPF,
score:3},{
_id: ObjectId("5aa59d9f11c5de25042a0703"),
id:pkCJGv23JobXVAXRAAAE,
score: 12},{
_id: ObjectId("5aa59d9411c5de25042a0701"),
id: fwCB0sJMCpsmN44ZAWPF,
score:7 }
该集合具有各种具有各种“id”的对象,我只想获取两个特定ID的文档并根据分数对它们进行排序。就像在上面的收藏品的基础上,我想要
的最高'得分'id: Y19rvB489or4mvtxAAAC, id:pkCJGv23JobXVAXRAAAE
..而不是其他ID。预期的输出应为:
{score:9}, {score:12}
你能告诉我使用聚合怎么可能?
答案 0 :(得分:0)
db.score.aggregate([
{$match: {id:{$in:["Y19rvB489or4mvtxAAAC","pkCJGv23JobXVAXRAAAE"]}}},
{$group:{_id:"$id", score:{$max:"$score"}}},
{$project:{_id:0,score:1}}
])
输出是:
{
"score" : 12
}
{
"score" : 5
}
如果你交叉检查你的收藏品,肯定不是{score:9}, {score:12}
。
答案 1 :(得分:0)
使用聚合的输入顺序输出:
var order =[data.id,data.enemy_id];
db.collection('Scores').aggregate([
{$match: {id:{$in:order}}},
{$addFields: {"__order": {$indexOfArray: [order, "$id" ]}}},
{$sort: {"__order": 1}},
{$group: {_id:'$id',score:{$max:'$score'}}},
{$project: {_id:0,score:1}}
]).toArray().then((docs)=>{
var score1 = JSON.stringify(docs,undefined,2);
var score1 = JSON.parse(score1);
console.log(score1);
});