【问题标题】:Mongoose default filter/query params for find()find() 的 Mongoose 默认过滤器/查询参数
【发布时间】:2015-02-25 22:56:21
【问题描述】:

如果我有一系列文档,例如:

{
    type: 'post',
    text: 'example',
    status: 'private' // or 'public'
}

我可以使用什么样的中间件或架构配置来确保默认情况下 Model.find() 只返回 status != 'private' 的文档?

我不想每次查询集合时都必须重复查询status != 'private'

感谢您的帮助!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以尝试为您的模型实现一个包装器方法,例如findNonPrivate(),然后您可以委托该方法查找每个status 不等于"private" 的文档。像这样的:

    var Model = mongoose.model('Model', theSchema);
    Model.findNonPrivate = function (q, callback) {
      q.status = q.status || {"$ne": "private"};
      this.find(q, callback);
    }
    

    然后您可以通过Model.findNonPrivate({}, callback) 获得您想要的。

    【讨论】:

    • 这不是总是返回所有内容吗?status != private? IE。它忽略了 q 参数,因为它被覆盖了。
    • 是的,我认为更好的实现是覆盖默认的 find 方法并使用 q.status = q.status || {"$ne": "private"}
    • @RobMeeuwisse 你们都是正确的,没有测试过。我已经更新了我的答案,谢谢。
    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多