Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 根据现场创建的_订购推文_Mongodb_Twitter - Fatal编程技术网

Mongodb 根据现场创建的_订购推文

Mongodb 根据现场创建的_订购推文,mongodb,twitter,Mongodb,Twitter,当使用Twitter流API检索推文时,每个推文都会连同其 created_at 字段,格式中的字符串字段,例如 Mon Sep 01 00:00:00 +0000 2014 我将这些推文存储在MongoDB数据库中。现在,我想根据推文的日期对推文进行排序,但如果我要求MongoDB根据创建的字段对推文进行排序,该字段是一个字符串: db.collection.find({},{created_at:1}).sort({created_at:1}) 日期将按照它们的字典顺序排列,这不是我想

当使用Twitter流API检索推文时,每个推文都会连同其

created_at
字段,格式中的
字符串
字段,例如

Mon Sep 01 00:00:00 +0000 2014
我将这些推文存储在MongoDB数据库中。现在,我想根据推文的日期对推文进行排序,但如果我要求MongoDB根据
创建的
字段对推文进行排序,该字段是一个字符串:

db.collection.find({},{created_at:1}).sort({created_at:1})
日期将按照它们的字典顺序排列,这不是我想要的

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

谢谢。

使用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"
    }
)

很好的解决方案,但请记住,在数据库中没有正确存储日期也可能会阻止您使用这些有用的“日期聚合运算符”:。因此,如果有机会,最好在插入MongoByes之前解析日期,但如果有大量推文通过Stream API发送,并且您的机器不足以在发送时立即处理这些推文(如我的情况),则最好先将它们存储在DB中,然后在进一步的步骤中一次处理一个。这就是为什么我按照API提供的方式存储它们。