Mongodb 根据现场创建的_订购推文
当使用Twitter流API检索推文时,每个推文都会连同其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}) 日期将按照它们的字典顺序排列,这不是我想
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提供的方式存储它们。