nodejs + mongoose - 如何在nodejs中使用forEach

时间:2015-11-20 14:43:23

标签: node.js mongodb mongoose

我还在学习node.js和mongodb。我试图用nodejs和mongoose编写简单的应用程序。我的猫鼬模式:

var todoSchema = new Schema({
  task: String,
  description: String,
  date: Date,
  status: String,
  checklist: Boolean,
  pic: String
});

我有一个名为todos的集合我尝试使用此代码获取todos的内容:

apiRoutes.route('/todos/detail')
.get(function(req, res){
    Todo.distinct( "pic" ).each(function(doc){
        Todo.find({"pic": doc.pic}, function(err, todo){
        if (err)
            res.send(err);

        var finalResult = [];
        finalResult.push(todo);
        res.send(finalResult);
        });
    });
});

但我收到了这个错误:

Object #<Query> has no method 'each'

有什么想法解决这个问题吗?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

根据我在你的问题中收集的内容,你不一定需要循环,因为你正在迭代的不同的pics数组,你用它来查询每个pic的集合,这是 实质上等同于仅查询整个集合作为发送从查询返回的结果文档数组:

apiRoutes.route('/todos/detail').get(function(req, res){
    Todo.find({"pic": { "$exists": true }}, function(err, todos){
        if (err) res.send(err);
        res.send(todos);
    });
});

除非您想获得一个独特的照片列表,否则请使用这些照片获取待办事项,您可以尝试以下方法:

apiRoutes.route('/todos/detail').get(function(req, res){
    Todo.find().distinct('pic', function(error, pics) {
        // pics is an array of all pics
        Todo.find({"pic": { "$in": pics } }, function(err, todos){
            if (err) res.send(err);
            res.send(todos);
        });
    });
});

答案 1 :(得分:0)

首先,您应首先使用.forEach()代替.each() :) 在这里,您可以看到forEach doc