我正在制作一个API,虽然有很多教程详细介绍了如何使用Mongoose findById()方法从Mongodb数据库中检索文档,但我似乎找不到一种方法来检索一些基于其他价值观的文件。
以下是相关代码:
var referenceRoute = router.route('/purchases/:reference')
referenceRoute.get(function(req, res) {
Model.find(req.params.reference, function(err, purchases) {
if (err)
res.send(err);
res.json(purchases);
});
});
这样做的目的是允许用户通过URI参数检索包含这些参考值的文档,例如www.example.com/api/purchases/674332457。
如果它与我有关,我正在使用Express,Node.js,Mongodb,Mongoose和body-parser。
答案 0 :(得分:0)
Mongoose模型find
函数接受filter
参数。您可以创建任何查询来选择文档:{ field1: value1, field2: value2... }
。此外,您可以使用大多数mongodb运算符,例如$and, $or
等。
referenceRoute.get(function(req, res) {
var filter = { url: req.params.reference };
Model
.find(filter)
.then(purchases => res.send(purchases))
.catch(err => res.send(err));
});
顺便说一句,Mongoose支持承诺,更好地使用它们,而不是回调。除此之外,您当前的代码有错误,如果出现错误,您会发送两次响应,这在我的示例中已得到修复。
答案 1 :(得分:0)
这是我发现的解决方案似乎非常适合使用URL查询字符串作为Mongodb查询。因此,如果有人查询,例如www.example.com/api/purchases/query?reference=12345,那么他们将获得与该参考值匹配的集合中的所有文档。
var referenceRoute = router.route('/purchases/query')
referenceRoute.get(function (req, res) {
Model.find(req.query, function (err, donations) {
res.send(donations);
});
});
最好将它称为var queryRoute = router.route('/purchases/query')
,因为它适用于不同的查询(尽管我似乎无法让它在多个查询上工作)。
这里找到了原始答案(How dangerous is a mongo query which is fed directly from a URL query string?)。