Mongoose find()返回一个空文档

时间:2017-10-24 12:30:51

标签: node.js mongodb mongoose

为什么这个函数会返回一个空文档?还有一个其他函数使用find({})而没有任何查询,它可以工作。

router.get('/mesCandidatures/:id', function(req, res, next) {
    Models.Candidature.find({"figurant":req.params.id}, function(err,docs) {
        if (err){
            throw err;
        }else{
            res.send(docs);
        }
    });
});

我发送此参数:59e5d09f853d00049fd67600

我应该收到这个:

{ 
"_id":"59ea0d1fea79bf099696fcab",
"etat":"validé",
"figurant":"59e5d09f853d00049fd67600",
"offre":"59e5bc1438950e01ae45d1d2"
}`

由于

2 个答案:

答案 0 :(得分:1)

你的代码中有一个回调中返回的Query实例,所以在find()的情况下,你必须使用exec()来获取mongoose,以便知道何时必须执行它,所以你的请求应

router.get('/mesCandidatures/:id', function(req, res, next) {
    Models.Candidature.find({ figurant: req.params.id }).exec( function(err,docs) {
        if (err){
            throw err;
        }else{
            res.send(docs);
        }
    });
});

但是,当您需要获取文档列表时,最初使用find(),如果您需要单个文档,则可以使用findOne()而不是查询返回可能为空的单个文档。然后你可以像你一样得到你的回调:

router.get('/mesCandidatures/:id', function(req, res, next) {
    Models.Candidature.findOne({ figurant: req.params.id }, function(err,docs) {
        if (err){
            throw err;
        }else{
            res.send(docs);
        }
    });
});

此外,除非您没有获得包含"nested.field"

等路径的嵌套字段,否则您不必为条件使用引号

答案 1 :(得分:1)

使用不正确的字段类型figurant

进行过滤可能会导致您的问题

您的req.params.id是一个字符串,而我猜测您的架构中figurant已定义为ObjectId类型,因此您需要按ObjectId而不是{{}进行过滤{1}}

将您的代码更改为:

string