猫鼬节点js中的'TypeError:meme.find(...)。forEach不是函数'?

时间:2018-06-24 12:11:23

标签: javascript node.js mongodb mongoose

我想遍历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)}}); 
});

我正在使用猫鼬和node.js来执行操作。

希望能帮助您解决此问题。

谢谢。

4 个答案:

答案 0 :(得分:2)

您使用的是异步方法find,因此应使用Promise或callback来获取结果,此处一些解决方案可以选择所需的内容

//使用承诺

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);
  });
});

答案 1 :(得分:0)

find方法是异步函数,因此它不返回结果,但您需要传递回调

Here您拥有该方法的文档

所以您应该打个电话,例如。像这样:

meme.find().exec(function (err, docs) {
    // something
});

答案 2 :(得分:0)

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)}}); 
    });
})

尝试以上一项, 猫鼬返回一个承诺,您必须先执行结果,然后才能迭代该结果。

答案 3 :(得分:0)

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
  });