formach在mongoose中没有使用nodejs

时间:2018-01-08 08:35:42

标签: node.js mongoose

我正在努力获得患者的所有咨询,如果患者有多个咨询,那么我需要迭代foreach / map,这是我的实现,但这不起作用,请帮助

在下面的代码中,当我点击api然后我收到的响应是这样的: 未指定默认引擎且未提供扩展名 如果我在没有foreach的情况下运行此代码,那么它正在工作,我正在获得文档长度

router.post('/get/consultations', function(req, res){
        console.log("consultation"+req.body.patient_id);
        var dc = {};
        consultation.find({"patient":req.body.patient_id}).forEach(function(doc){
                console.log(doc.length);
                //dc.push(doc);
        });
        res.json(dc);

    });

1 个答案:

答案 0 :(得分:3)

根据Mongoose Doc http://mongoosejs.com/docs/queries.html

  

当回调函数:

     
      
  • 被传递,操作将立即执行,并将结果传递给回调。
  •   
  • 未传递,将返回Query实例,该实例提供特殊的查询构建器界面。
  •   

自你的陈述

consultation.find({"patient":req.body.patient_id})

没有将回调函数作为参数传递。此语句返回一个Query对象,您可以使用.exec执行该对象。

// .find returns a Query object
var query = Person.find({ 'name.last': 'Ghost' });

// execute the query at a later time
query.exec(function (err, person) {
  if (err) return handleError(err);
  console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host.
})

所以你的代码应该是以这种方式之一

// using exec     
consultation.find({"patient":req.body.patient_id}).exec(function(docs){
docs.forEach(function(doc){
    console.log(doc.length);
});

// using callback     
consultation.find({"patient":req.body.patient_id}, function(err,docs){
    docs.forEach(function(doc){
         console.log(doc.length);
    });
});

// using promise (mongoose 4+)
consultation.find({"patient":req.body.patient_id}).then( function(docs){
    docs.forEach(function(doc){
         console.log(doc.length);
    });
});