如何显式查询一个字段并获得所有可能的结果? 蒙戈
如果你有这样一个集合。
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" });