有没有办法用一个列表或ID数组查询MongoDB Rest API

时间:2014-10-21 23:50:33

标签: mongodb express mongoose

我使用MEAN堆栈和Mongoose。有没有办法用多个ID查询MongoDB,只在一个查询中返回那些特定的ID,例如/ API /产品/ 5001,5002,5003

这是可能的,还是我需要单独查询每个产品,或者为产品添加其他属性并通过该查询进行查询。

更新:为了澄清下面的建议,我设法使用{'_id': { $in: [5001,5002,5003]}使其部分工作但是我在确定如何将列表从api url传递到find函数时遇到了问题。

将Express.js用于路由器     router.get(' / list /:ids',controller.showByIDs);

exports.showByIDs = function(req, res) { 
  Product.find({'_id': { $in: [req.params.ids]}}, function (err, product) {
    if(err) { return handleError(res, err); }
    if(!product) { return res.send(404); }
    return res.json(product);
  }) 
};

然后尝试/ api / products / list / 5001但/ api / products / list / 5001,5002不起作用。我不确定它是否是需要更改的网址或路由器代码中的语法问题或控制器。

1 个答案:

答案 0 :(得分:2)

您可以使用$in运算符一次查询多个值:

Products.find({_id: {$in: [5001, 5002, 5003]}}, function (err, products) { ... });

在Express方面,您需要使用ids参数的格式,以便将其拆分为id值数组,就像在第一个示例中一样:

/api/products/5001,5002,5003

然后在您的路由处理程序中,您可以调用split字符串上的req.params.ids函数将其转换为可以与$in一起使用的id值数组:

exports.showByIDs = function(req, res) { 
  var ids = req.params.ids.split(',');
  Product.find({'_id': { $in: ids}}, function (err, product) {
    if(err) { return handleError(res, err); }
    if(!product) { return res.send(404); }
    return res.json(product);
  }) 
};