【问题标题】:TypeError: Cannot create property '_id' on string... even after using JSON.Parse?? (MongoDB /Node.js / Twitter API)TypeError:无法在字符串上创建属性“_id”......即使在使用 JSON.Parse 之后?? (MongoDB /Node.js / Twitter API)
【发布时间】:2019-02-27 13:27:41
【问题描述】:

编辑 - 顺便说一句,我正在尝试将 100 条推文插入 MongoDB 数据库。

我正在尝试将推文的文本(使用 Twitter API)插入到 MongoDB 数据库中,即使在解析之后我也会得到 TypeError: Cannot create property _id on string。我敢打赌,这可能是一个简单而愚蠢的错误来解决。我的代码如下:

编辑 2 - 我编辑了代码以得到同样的错误。

var Twitter = require('twitter');
var fs = require("fs");
var request = require("request");

var client = new Twitter({
  consumer_key: ' ',
  consumer_secret: ' ',
  access_token_key: ' ',
  access_token_secret: ' '});

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
var parser = { useNewUrlParser: true };

    MongoClient.connect(url, parser, function(err, db) {
      if (err) throw err;
      console.log("Database created!");
      var dbo = db.db("mydb");
      dbo.createCollection("datos_sentimiento", function(err, res) {
        if (err) throw err;
        console.log("Collection created!");
        db.close();
      });
    });

MongoClient.connect(url, parser, function(err, db) {
  if (err) throw err;
  var dbo = db.db("mydb");
  var cont = 0;

  var params = {q: '@Avengers', count: 100, include_rts: 0, tweet_mode: 'extended', retweeted_status: 'extended'};
  client.get('search/tweets', params, function(error, tweets, response) {
  if (!error) {
      //console.log(tweets);
      for(var i=0; i < params.count; i++){

        if(tweets.retweeted_status){
          tweets = tweets.retweeted_status;
          var tweet = (JSON.stringify(tweets.statuses[i])+"\n");
          var string = tweet.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
          console.log('hi');
        }
        else{

          //console.log('hi2');
        }

        var tweet = (JSON.stringify(tweets.statuses[i].full_text));
        var string = tweet.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
        var string2 = (JSON.stringify(string)+"\n");

        fs.appendFile("tweet.txt", string2, function (err) {
          if (err) throw err;
            //console.log('Saved!');
        }); 

        /*console.log(cont);
        cont++;*/

        var myobj = JSON.parse(string2);

        console.log("hi "+myobj);
        dbo.collection("datos_sentimiento").insertOne(myobj, function(err, res) {
          if (err) throw err;
          console.log("1 document inserted");
          db.close();
        });
        //console.log(i+'fdfdfdfdf');

        }
      }
  });
}); 

错误显示以下消息:

TypeError: Cannot create property '_id' on string 'RT @RobertDowneyJr Brace yourselves @Avengers InfinityWar hits the interwebs today httpstcoqvBQ3W8jvc'

【问题讨论】:

  • mongodb 是文档对象存储,因此您必须将其存储为对象而不是字符串。

标签: node.js mongodb twitter


【解决方案1】:

我找到了解决方案。 MongoDB 需要(必须拥有!)有一个文档(例如 text = {screen_name: name, text: text})。我的更正如下:

var text = JSON.parse(string2);
var myobj = {texto: text};

console.log("hi "+text);
dbo.collection("datos_sentimiento").insertOne(myobj, function(err, res) {
    if (err) throw err;
        console.log("1 document inserted");
    db.close();
});

【讨论】:

    【解决方案2】:

    变量myobj在上述情况下是字符串,所以请像{myobj}这样的对象:

    上一个:dbo.collection("datos_sentimiento").insertOne(myobj, function(err, res) {

    修改为:dbo.collection("datos_sentimiento").insertOne({myobj}, function(err, res) {

    【讨论】:

      猜你喜欢
      • 2018-11-24
      • 2023-04-11
      • 1970-01-01
      • 2022-01-25
      • 2019-07-20
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多