想要使用mongodb

时间:2018-03-27 06:31:45

标签: mongodb

我有一个名为'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}

你能告诉我使用聚合怎么可能?

2 个答案:

答案 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);
    });