Mongoose:正确获取查询结果

时间:2017-06-16 17:08:35

标签: javascript node.js mongodb express mongoose

你好吗? 我对mongoose和mongoDB很新,我在进行基本查询时遇到了麻烦。所以,我有这个代码:

function addVoterToElection(req, res) {
    let query = Election.findOne({ 'name' : req.body.electionName });
    let result = query.exec((err, election) => {
        if(err) return err;
        return res.send(election);
    });
}

按预期工作,因为t将我需要的选举发送回请求者:

{
    "_id": "594408b7c94fcdc009000001",
    "votechain": "594408b7c94fcdc009000002",
    "name": "eleicaoteste",
    "electionID": 12,
    "__v": 0,
    "voters": null
}

但问题是我需要将该对象用于其他目的,而且我遇到了麻烦并且#34;提取"它来自query.exec。如果我做

let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec((err, election) => {
    if(err) return err;
    return (election);
});
res.json(result);

所有我回来的是

{
    "emitted": {},
    "ended": false,
    "_events": {},
    "_eventsCount": 2
}

因此我无法将其用于依赖此选举对象工作的下一个查询。我能做什么?我知道这是一个相当基本的问题,但我不确定我是否理解整个承诺的作用。 非常感谢你!

2 个答案:

答案 0 :(得分:0)

问题在于您没有使用promise权限。

这是开始学习Promises的好地方:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

解决方案非常简单:

let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec();

result.then((result) => {
    res.json(result);
}).catch((error) => {
    // console.log(err);
});

http://mongoosejs.com/docs/promises.html

答案 1 :(得分:-1)

let query = Election.findOne({ 'name' : req.body.electionName });

let result = query.exec((err, election) => {
    if(err) return err;
    return (election);
});

res.json(result);

查询以异步方式(在后台运行)运行,而其余代码则执行。当查询执行exec'ing时,它执行带错误和选举的回调。当你返回结果时,它还没有完成执行,因此你的问题。

您可以做的是将res.json移动到回调的主体,如下所示:

let query = Election.findOne({ 'name' : req.body.electionName });

query.exec((err, election) => {
    if(err) return err;
        res.json(election);
});