【发布时间】: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}。
在这种情况下,a 和b 都应该在d 有资格获得的文档集中,因为d 满足两者的要求。
但是,如果我们在 find 查询中包含 d 的所有属性,我们会得到 db.A.find({d.age > req.age.min, d.age < req.age.max, d.gender: req.gender}),这将从我们的结果中排除 a 和 b。
考虑到d 可能包含比A 中的文档要求更多的属性,并且要求在A 和D 中的属性不固定?我们希望避免在所有A.req 文档中指定D 中的所有可能属性,因为我们希望我们的要求尽可能灵活。
【问题讨论】: