【问题标题】:Saving twitter stream not properly saved in MongoDB using Mongoose使用 Mongoose 保存未正确保存在 MongoDB 中的 twitter 流
【发布时间】:2018-06-27 15:00:06
【问题描述】:

所以我想使用 Mongoose 将来自 Twitter Streaming API 的数据流保存在 MongoDB 中。不知何故,它不会保存所有数据,并且当我运行我的代码时,它只会从流中无限量的数据(不完整)中保存 1 个文档:

var mongoose = require('mongoose'),
TwitterStream = require('twitter-stream-api'),
fs = require('fs');
mongoose.connect('mongodb://localhost/insert_sample');

var keys = {
consumer_key : "",
consumer_secret : "",
token : "",
token_secret : ""
};

var Schema = mongoose.Schema;

// create a schema
var userSchema = new Schema({}, {"strict": 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 Twitter = new TwitterStream(keys, false);
Twitter.stream('statuses/filter', {
track: 'travel'
});

// create a new user called twitter
var Twitter = new User();

// call the built-in save method to save to the database
Twitter.save(function(err) {
if (err) throw err;

console.log('User saved successfully!');
});

命令行输出:User saved successfully!

当我尝试在 MongoDB shell 中使用 db.users.find() 进行查询时,结果如下:

{ "_id" : ObjectId("5a60a5558f4f1d21bcadd72b"), "__v" : 0 }

什么时候应该是这样的:

{
"created_at": "Fri Aug 04 05:42:03 +0000 2017",
"id": 893346273255866400,
"id_str": "893346273255866368",
..........and soooo many more attributes }

编辑!!!抱歉,我不小心按了 Enter 并发布了它,而没有其他需要清楚的东西。我的错。

【问题讨论】:

    标签: javascript node.js mongodb twitter stream


    【解决方案1】:

    您正在覆盖您的 Twitter 变量并将用户数据保存为空对象。

    // create a new user called twitter
    var Twitter = new User();
    
    // call the built-in save method to save to the database
    Twitter.save(function(err) {
    if (err) throw err;
    

    创建流后,您需要监听数据事件并使用该数据保存在数据库中。

    删除上面的行并使用类似的东西;

     // listen for data from stream
        Twitter.on('data', function (obj) {
    
            var data =  obj.toString('utf8');
            console.log(data);
            var TwitterData = new User(data); // create object 
            TwitterData.save(); // save data to DB
    
        });
    

    希望对您有所帮助!

    【讨论】:

    • 您好,感谢您的回复!我按照您的指示做了,但它存储了另一件事,而不是来自 twitter 流 api 的流。这是输出data <Buffer 7b 22 63 72 65 61 74 65 64 5f 61 74 22 3a 22 54 68 75 20 4a 61 6e 20 31 38 20 31 34 3a 35 34 3a 31 36 20 2b 30 30 30 30 20 32 30 31 38 22 2c 22 69 64 ... >@H。马欣达
    • 将缓冲区转换为字符串,如:obj.toString('utf8');
    • 我在console.log('data', obj); 之前插入它仍然没有变化:( @H. Mahinda
    • 另外,如果即时流式传输的数据并不总是具有一致的属性,那么写 var userSchema = new Schema({}, {"strict": false}); 是否正确?因为有些推文包含坐标,而另一些则不包含。与图片 URL 相同。
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2018-06-11
    • 1970-01-01
    • 2016-04-16
    • 2012-07-26
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多