如何显式查询一个字段并获得所有可能的结果? 蒙戈

如果你有这样一个集合。

user { name: String, email: String, information: String } 

你会做这样的事情来得到所有约翰的信息医生的名单。

 db.user.find({name: "John", information: "doctor" }); 

现在,这使得代码冗余时,有可变的input。 如有排列的字段进行过滤。 我试图使我的查询通用,如这个坏的例子。 因此,我可能希望能够明确说明可以匹配任何值的字段。 以下示例理论上应该返回相同的文档。

例:

非显式(普通) db.user.find({});

显式(奇怪) db.user.find({name: {$ANY}});

或者让它更复杂。

 db.user.find({name: {$ANY}, information: "doctor"}); 

这是行不通的,但目的是要获得所有的医生文件,但在name字段上有任何价值,而不仅仅是约翰的。 也许甚至更复杂的事情是这样的。

 db.user.find({name: function(){ if(req.query.name)//check if empty { return req.query.name; } else { return $ANY; } }, information: "doctor"}); 

这将是足够通用的使用一个单一的查询实例的dynamic请求行为。据我所知,没有任何这样的实现。

先谢谢你。

要获取所有的医生文档,但是在name字段上有任何价值,您需要查询中的$exists$ne操作符,因为$exists操作符与包含该字段的文档相匹配,包括字段值为空, $ne运算符selectname字段不为null的文档:

 db.user.find({"name": { "$exists": true, "$ne": null }, "information": "doctor"}); 

如果你想find所有的information =“医生”的文件,为什么不只是查询没有名字?

 db.user.find({information: "doctor" });