我想遍历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来执行操作。
希望能帮助您解决此问题。
谢谢。
答案 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
});