12

我有一个 MYSQL 表,其中记录了人名和到达时间,以数字表示。把它想象成一场马拉松。我想知道有多少人进入了某个时间间隔,他们的名字相同,所以:

SELECT name, COUNT(*) FROM mydb.mytable
WHERE Time>=100 AND Time<=1000
GROUP BY name

结果我得到:

Susan, 1
John, 4
Frederick, 1
Paul, 2

我现在正在迁移到 MongoDB,并使用 Python 进行编码(所以我正在寻求 Pymongo 的帮助)。我尝试查找有关 GROUP BY 等效项的信息(即使我已经读到 NoSQL 数据库在这种操作上比 SQL 数据库更差),但由于他们发布了新的 agreggate API,我找不到一个像这样的简单示例使用 group 方法、Map-Reduce 方法或全新的 agreggate API 解决。

有什么帮助吗?

4

1 回答 1

26

在文档、Google 和本网站中都有这样的示例。

一些参考资料:

对于一些代码:

self.db.aggregate(
    # Lets find our records
    {"$match":{"Time":{"$gte":100,"$lte":1000}}}, 

    # Now lets group on the name counting how many grouped documents we have
    {"$group":{"_id":"$name", "sum":{"$sum":1}}} 
)
于 2013-07-31T10:21:50.840 回答