MONGODB:转换SQL Union查询

时间:2014-03-02 00:28:23

标签: mysql mongodb union

我正在从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
}

1 个答案:

答案 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。