'TypeError: meme.find (...). ForEach не является функцией' в узле mongoose js? - PullRequest
0 голосов
/ 24 июня 2018

Я хочу просмотреть мою коллекцию в MongoDB, поэтому я попытался .forEach выполнить действие, но, похоже, это неправильный подход.Каждый раз, когда я пытался запустить его, он выдает сообщение об ошибке: TypeError: meme.find(...).forEach is not a function

Это мой код:

var meme = require('../app/model/meme');

meme.find().forEach(function(meme){
   meme.update({_id: meme._id}, {$set: { objectID: meme._id.toString().slice(10).slice(0,24)}}); 
});

Я использую mongoose и node.js для выполнения действия.

Буду признателен за помощь в решении этой проблемы.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 24 июня 2018

Вы используете асинхронный метод find, поэтому вы должны использовать обещания или обратный вызов для получения результата, здесь некоторые решения выбирают то, что вы хотите

// используя обещания

meme.find().then((memes) => {
  memes.forEach((meme) => {
    console.log(meme);
  });
});

// используя обратные вызовы

meme.find({}, (err, memes) => {
  memes.forEach((meme) => {
    console.log(meme);
  });
});

// используя exec

meme.find().exec((err, memes) => {
  memes.forEach((meme) => {
    console.log(meme);
  });
});
0 голосов
/ 24 июня 2018
var meme = require('../app/model/meme');

meme.find().then(memes => {
    memes.forEach(function(meme){
        meme.update({_id: meme._id}, {$set: { objectID: meme._id.toString().slice(10).slice(0,24)}}); 
    });
})

попытка выше единицы, мангуста возвращает обещание, вы должны сначала выполнить результаты, после чего вы можете выполнить итерацию по этим результатам.

0 голосов
/ 24 июня 2018

Есть три основных состояния в function(). Вам необходимо обновить данные, если вы найдете данные в stream , а затем нужно обработать, если что-то пошло не так ... и нужно обработать финальную функцию сделал свою работу нужно дать call back данные не найдены ...

 var meme = require('../app/model/meme');

meme.find(query).stream()
  .on('data', function(meme){
   meme.update({_id: meme._id}, {$set: { objectID: meme._id.toString().slice(10).slice(0,24)}}); 
  })
  .on('error', function(err){
   //Getting `error` Something went wrong
  })
  .on('end', function(){
    // finally end
  });
0 голосов
/ 24 июня 2018

find метод является асинхронной функцией, поэтому он не возвращает результаты, но вместо этого вам нужно передать обратный вызов

Здесь у вас есть документация по этому методу

Так что вам следует позвонить, например. как это:

meme.find().exec(function (err, docs) {
    // something
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...