带有多个字段的Node JS Rest Service截然不同

时间:2018-10-22 17:40:47

标签: node.js mongodb

我正在使用node js和MongoDB开发后端。 我已经开发了GET和POST请求。我在特定字段上使用了GET请求:

router.get('/machine/:brand', function(req,res){
Machine.find({Brand:req.params.brand}).distinct('Version', (err, machines) => {
if (err) {
    console.log(err);
    return res.status(400).send({ status: 'ko', data: {msg: err.message }});
    console.log(err);
}
res.status(200).send({status: 'ok', data: {msg: 'Brands available', brand:machines}});
});
});

此请求运行良好,并为我提供了特定品牌机器的所有版本的列表。 现在,我还需要使用版本检索机器表的其他字段模型。 有可能与2个字段一起使用吗? 如何在唯一的GET请求中检索2字段的不同?

1 个答案:

答案 0 :(得分:1)

使用一个MongoDB查询无法轻松获得两个单独字段的不同值。使用聚合框架将是可能的。但是,该代码相对较讨厌,您也不会利用字段上的索引。因此,您可以执行以下操作:

router.get('/machine/:brand', function(req,res) {
    Machine.find({Brand:req.params.brand}).distinct('Version', (err, machines) => {
        if (err) {
            console.log(err);
            return res.status(400).send({ status: 'ko', data: {msg: err.message }});
        }
        Machine.find({Brand:req.params.brand}).distinct('SomeOtherField', (err, someOtherFieldDistinctValues) => {
            if (err) {
                console.log(err);
                return res.status(400).send({ status: 'ko', data: {msg: err.message }});
            }
            res.status(200).send({status: 'ok', data: [
                {msg: 'Brands available', brand: machines},
                {msg: 'SomeOtherField available', someOtherField: someOtherFieldDistinctValues}
            ]});
        });
    });
});

这样,您至少只有一个HTTP请求,它将两次调用MongoDB。