使用任意数量的查询参数来过滤mongoose中的结果

时间:2015-09-07 21:47:47

标签: node.js mongodb mongoose

我正在使用node express和mongodb使用mongoose构建API。 我有一个处理用户帖子的帖子资源,并希望能够对帖子资源执行各种查询。 例如,我有一个函数,它返回所有帖子如下:

// Gets a list of Posts
exports.index = function(req, res) {
  console.log(req.query);
  Post.findAsync()
    .then(mUtil.responseWithResult(res))
    .catch(mUtil.handleError(res));
};

我正在寻找处理请求可能附带的任何其他查询参数的好方法。

/posts会返回所有帖子,但/posts?user=12会返回ID为12的用户发帖,而/posts?likes=12会返回12个或更多喜欢的帖子。

如何检查并应用这些查询参数来过滤并返回结果,因为它们可能存在也可能不存在。 谢谢;)

1 个答案:

答案 0 :(得分:0)

如果user=12表示" ID为12"的用户,则likes=12表示"喜欢大于12"?您需要对查询更具描述性。您可以通过传递一个对象数组来实现。以可解释的方式发送您的查询:

var filters = [
{
    param: "likes",
    type: "greater"
    value: 12
},
{
    param: "user",
    type: "equal",
    value: "12"
}]

var query = Post.find();

filters.forEach(function(filter) {

    if (filter.type === "equal") {
        query.where(filter.param).equals(filter.value);
    }
    else if (filter.type === "greater") {
        query.where(filter.param).gt(filter.value);
    }
    // etc,,,
})

query.exec(callback);