【问题标题】:How to best filter a MongoDB collection using a predicate如何使用谓词最好地过滤 MongoDB 集合
【发布时间】:2011-10-25 08:45:20
【问题描述】:

我们希望使用“过度指定”的 find() 查询来过滤 MongoDB 集合。例如:collection A,我们要过滤的集合,其文档包含一组属性要求。例如文档a,其中包含需求{req: age:{min:20,max:30}}b,其中包含需求{req: gender:male}

我们还有一个来自collection D 的文档d,其中包含以下属性:d = {age:21, gender: male}

在这种情况下,ab 都应该在d 有资格获得的文档集中,因为d 满足两者的要求。

但是,如果我们在 find 查询中包含 d 的所有属性,我们会得到 db.A.find({d.age > req.age.min, d.age < req.age.max, d.gender: req.gender}),这将从我们的结果中排除 ab

考虑到d 可能包含比A 中的文档要求更多的属性,并且要求在AD 中的属性不固定?我们希望避免在所有A.req 文档中指定D 中的所有可能属性,因为我们希望我们的要求尽可能灵活。

【问题讨论】:

    标签: mongodb filter predicate


    【解决方案1】:

    没有直接的方法可以做到这一点。您可以采取的唯一途径是对每个需求执行存在性检查,这不会导致可以想象的最优雅的查询。使用您的查询格式:

    db.A.find({$and:[{req.age.min:{$exists:true}}, {d.age > req.age.min}], ....)
    

    换句话说。您修改查询,使其遵循“如果 D 的属性在 A 中有要求,请检查它是否满足该要求”。坦率地说,我认为寻找更合适的模式可能是一条更优雅的路线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-26
      • 2020-05-20
      • 2010-09-12
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      相关资源
      最近更新 更多