Ошибка типа: невозможно создать свойство «_id» для номера «1» при попытке отправки в MondoDB - PullRequest
0 голосов
/ 07 апреля 2020

Мой код находит subreddit и возвращает 25 новых комментариев в формате JSON. Затем я преобразую его в строку и склеиваю по пробелам, одновременно удаляя специальные символы. Затем я создаю словарь, который считает частоту слов в каждом комментарии. Затем я отправляю словарь в мою базу данных.

Проблема в том, что я хочу разбить объекты и сделать каждое слово входным или объединить все объекты в один и суммировать частоту повторяющихся ключей.

Вот попытка перебрать ключи:

function insertData() {
  let words = new Array();
  let commentlist = r.getSubreddit('').getNewComments();
  let cleanData = async() => {
    let result = await (commentlist);
    return result;
  };

  cleanData().then(function(result) {
    for (i = 0; i <= result.length - 1; i++) {
      let currentData = JSON.stringify(result[i].body).split(' ');
      for (j = 0; j <= currentData.length; j++) {
        if (currentData[j] != undefined) {
          words.push(currentData[j]);
        }
      }
    }
    for (i = 0; i <= words.length - 1; i++) {
      words[i] = words[i].replace(/[?.,"'\/#!$%\^&\*;:{}=\-_`~()]/g, "", '');
      words[i] = words[i].replace(/\s{2,}/g, " ");
      words[i] = words[i].replace(/[0-9]/g, " ");
    }

  }).then(() => {
    var wordsMap = {};
    words.forEach(function(key) {
      if (wordsMap.hasOwnProperty(key)) {
        wordsMap[key]++;
      } else {
        wordsMap[key] = 1;
      }
    });

    words = wordsMap;
    console.log(words);
    MongoClient.connect(process.env.MONGODB_URI || process.env.DB_CONNECTION, {
      useUnifiedTopology: true,
      useNewUrlParser: true
    }, function(err, db) {
      if (err) throw err;
      const dbo = db.db("d");
      const messageTable = dbo.collection("x");
      for (var key in words) {
        messageTable.insertOne(words[key], function(err, res) {
          if (err) throw err;
          console.log("documents inserted");
        });
      }
    })
  });

}

Но я получаю ошибку до последнего для l oop, даже если я удаляю все числа из моих ключей. Ошибка:

TypeError: Невозможно создать свойство '_id' для числа '1'

Теперь мой вопрос заключается в том, было бы проще объединить объекты в моей базе данных и сортировать их по частоте или разделить их до или после добавления их в мою базу данных. Как бы я сделал это, откуда я?

1 Ответ

0 голосов
/ 07 апреля 2020

Я понял это. Я неправильно понял, что сделал words[key], и просто имел доступ к значению, а не к отправке объекта. Я исправил это, создав объект, изменив функцию с inserOne() на insertMany(). Изменение происходит в последнем для l oop:

MongoClient.connect(process.env.MONGODB_URI || process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
            if (err) throw err;
            const dbo = db.db("mydb");
            const messageTable = dbo.collection("comments");
            for(var key in words){
                let myobj = 
                [{ 
                    word: key,
                    message: words[key]
                }];
                messageTable.insertMany(myobj, function(err, res){
                    if (err) throw err;
                    console.log("documents inserted");
                });
            }
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...