如何在NodeJS存储推特流到MongoDB前修改字段值(转ISO日期)
解决Twitter流数据存入MongoDB前修改字段的问题
嘿,这事儿不难!你只需要在把推特数据实例化成Mongoose模型之前,修改tweet对象里的created_at字段就行啦。我给你调整一下代码,直接看修改后的版本更清楚:
修改后的完整代码
var mongoose = require('mongoose'), Twit = require('twit'), fs = require('fs'); mongoose.connect('mongodb://localhost/insert_sample'); var T = new Twit({ consumer_key: '', consumer_secret: '', access_token: '', access_token_secret: '' }) var Schema = mongoose.Schema; // create a schema var userSchema = new Schema({}, {"strict": false, collection: 'sample_collection', versionKey: false}); // the schema is useless so far // we need to create a model using it var User = mongoose.model('User', userSchema); // make this available to our users in our Node applications module.exports = User; //var sanFrancisco = [ 116.8127, 4.4681, 127.492047, 19.594594 ] var stream = T.stream('statuses/filter', { track: 'philippines vacation, itsmorefuninthephilippines, philippines, boracay, palawan, chocolate hills, mindanao, luzon, visayas, dakak' }) stream.on('tweet', function (obj) { // 关键修改:转换created_at字段为ISO格式字符串 // 如果你想让MongoDB存储为原生Date类型(更适合后续查询),可以直接写 obj.created_at = new Date(obj.created_at); obj.created_at = new Date(obj.created_at).toISOString(); var TwitterData = new User(obj); // create object TwitterData.save(); // save data to DB console.log(obj); })
为什么这么做?
- 你原来的代码是直接把原始的推特数据丢进模型里存储,现在我们在实例化
User之前,先修改了obj的created_at字段,这样存入数据库的就是转换后的ISO格式字符串啦。 - 如果你选择直接存储
Date对象(注释里的写法),MongoDB会自动把它存为ISODate类型,后续做日期范围查询、排序这类操作会更方便,比存字符串实用多了。
要是你之后还要修改其他字段,比如处理推特里的文本内容、提取特定信息,都可以用同样的思路:在实例化模型前,先修改tweet对象对应的字段就行。
内容的提问来源于stack exchange,提问作者codex
相关产品推荐
相关产品推荐

