根据created_at字段订购推文

时间:2015-05-31 10:40:46

标签: mongodb twitter

使用Twitter Stream API检索推文时,每条推文都会与其

一起下载
created_at

字段,格式为String字段,例如

Mon Sep 01 00:00:00 +0000 2014

我将这些推文存储在MongoDB数据库中。现在我想根据日期订购推文,但如果我要求MongoDB根据created_at字段对其进行排序,这是一个字符串:

db.collection.find({},{created_at:1}).sort({created_at:1})

日期将根据他们的字典顺序排序,这不是我想要的。

如何修改查询以便根据日期而不是字符串对它们进行排序?我尝试使用ISODate个对象,但由于该字段是字符串,因此不起作用。

感谢。

1 个答案:

答案 0 :(得分:1)

使用MapReduce:

db.rawTweets.mapReduce(
    // map
    function() {
        emit(
            // "Thu Jul 17 03:21:42 +0000 2014"
            new Date(Date.parse(this.created_at.replace(/(\+\S+) (.*)/, '$2 $1'))).toLocaleDateString(),
            1
        );
    },

    // reduce
    function(key, values) {
        return Array.sum(values)
    },

    {
        query: {},
        out: "rawTweetsCount"
    }
)