更新文档数组,删除MongoDB中除3个最佳分数外的所有分数

时间:2018-03-21 00:19:11

标签: arrays mongodb

我正在尝试更新我的所有文件,以便他们只获得3个最高得分的意见,但我不知道该怎么做。这是我的例子:

{
_id:9787878,
name: "Restaurant Manolo",
scores: [ 
         {grade:8, opinion:"Very good"},
         {grade:1, opinion:"Bad"},
         {grade:10, opinion:"Very good"},
         {grade:2, opinion:"Bad"},
         {grade:6, opinion:"Very good"},
        ]
}

我想更新文档,看起来像这样:

{
_id:9787878,
name: "Restaurant Manolo",
scores: [ 
         {grade:10, opinion:"Very good"},
         {grade:8, opinion:"Very good"},
         {grade:6, opinion:"Very good"},
        ]
}

我知道应该使用什么类型的查询?

2 个答案:

答案 0 :(得分:2)

尝试使用$sort with $slice修饰符。

db.col.update(
   { name: "Restaurant Manolo" },
   { $push: { scores: { $each: [ ], $sort:  { grade: -1 }, $slice: 3 } } }
)

答案 1 :(得分:0)

db.server.updateMany(
  {}, // all documents
  { 
    $set : {
      scores : {
        $sort: { grade: 1 }, // low->high
        $slice: -3 // keep last 3
      }
    }
  }
);