我正在尝试更新我的所有文件,以便他们只获得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"},
]
}
我知道应该使用什么类型的查询?
答案 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
}
}
}
);