【问题标题】:How to make object for mongoose query?如何为猫鼬查询制作对象?
【发布时间】:2016-09-15 13:57:19
【问题描述】:

有没有办法为 mongoose 构建完整的对象以用作查询?在制作搜索路线时,我需要传递许多查询参数并在 express 中间件中对其进行清理。从那些我想构建查询对象。

我最终得到了这样的结果:

中间件内部:

res.locals.filter = {
   query: ...,
   projection: ...,
   sort: ...,
   limit: ....,
}

路由器内部:

User.find(res.locals.filter.query)
    .sort(res.locals.filter.sort)
    .limit(res.locals.filter.limit)
    .exec()

有什么方法可以格式化我的过滤器,以便我可以一次通过所有过滤器?找到了一些例子,但似乎没有什么对我有用...

换句话说,做类似的事情:

User.query(filter)

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    您可以通过在架构上添加query 作为static 方法来做到这一点:

    userSchema.statics.query = function(filter) {
        return this.find(filter.query).sort(filter.sort).limit(filter.limit);
    };
    

    你可以这样称呼它:

    User.query(res.locals.filter).exec(callback);
    

    【讨论】:

    • 感谢您的意见。我在想更像link 的东西。 'myModel.find(filter, {sort: {created_at: -1}, limit: 10}, function(err, items){})' 但作为一个对象并使用参数扩展为函数,但我不知道它们的名称。这有意义吗?
    • @johnymachine 这种风格的find 调用对象字段如$query 和$orderBy 仅在shell 中受支持(现在已弃用),因此没有任何内置支持你需要自己做。
    【解决方案2】:

    正如 JohnnyHK 所指出的,find 调用与对象字段如 $query 和 $orderBy 的样式仅在 shell 中受支持(现在 已弃用) 所以没有任何内置支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多