mysql - MONGODB:转换 SQL 联合查询

标签 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);

这会选择 10 个最佳和最差的玩家,这些玩家按计算出的字段 points 排序。 谁能帮我解决这个问题?

MongoDB 播放器中的文件如下所示:

{
    _id: ObjectId("1234567890"),
    name: "foo",
    score_kills: 321,
    score_deaths: 43
}

最佳答案

您可以使用聚合框架来做到这一点。在一个查询中执行此操作不会特别有效,因此您可能应该做与在运行两个查询的 SQL 中所做的相同的事情 - 唯一的区别是 MongoDB 不会将它们“联合”你,你必须在应用程序中这样做。

两个聚合查询是:

db.collection.aggregate( [
        {$project:{name:1, points:{$subtract:["$score_kills","$score_deaths"]}}},
        {$sort:{points:-1}},
        {$limit:10}
]);

这将为您提供前 10 名。要获得后 10 名,您可以执行相同的操作,但按 {points:1} 排序,这将使您成为后 10 名。

关于mysql - MONGODB:转换 SQL 联合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22122328/

相关文章:

mysql - 当我选择更新的开始行和结束行时,mysql 会锁定一系列行吗?

mysql - SQL - 如何同时将相同的值插入两个表中

php - 加入其他表并在一个列中使用 group by 计算相同的 id

node.js - 尝试从 Sails.js 应用程序执行 MongoDB 查询时出现奇怪的 "timeouts"

javascript - 连接到 MongoDB 数据库

Mysql:用计数联合两列

mysql - 如何让 SQL SELECT 只显示在 WHERE 子句中触发结果的列

mysql - MySQL触发器是异步的吗

php - 用户信息未进入MYSQL数据库

javascript - 如何从javascript在mongodb中传递内部查询