我正在从MySql转换为MongoDB。现在我无法找到此查询的替换:
(SELECT id, name, (score_kills - score_deaths) AS points FROM player ORDER BY points DESC LIMIT 10)
UNION
(SELECT id, name, (score_kills - score_deaths) AS points FROM player ORDER BY points ASC LIMIT 10);
这将选择按计算字段points
排序的10个最佳和最差玩家。
任何人都可以帮我这个吗?
MongoDB中播放器中的文档如下所示:
{
_id: ObjectId("1234567890"),
name: "foo",
score_kills: 321,
score_deaths: 43
}
答案 0 :(得分:1)
您可以使用聚合框架执行此操作。在一个查询中执行此操作并不是特别有效,因此您可能只需执行与在SQL中运行两个查询相同的操作 - 唯一的区别是MongoDB不会“联合”它们你,你必须在申请表中这样做。
两个聚合查询将是:
db.collection.aggregate( [
{$project:{name:1, points:{$subtract:["$score_kills","$score_deaths"]}}},
{$sort:{points:-1}},
{$limit:10}
]);
这会给你前10名。要获得最低10分,你会做同样的事情,但按{points:1}
排序,这将留下你的底部10。