Mongo db条件查询
是mongo的新手,卡在条件查询中: 我想根据3条件,名字,姓氏和电子邮件ID执行搜索: 下面的查询工作完美时,所有的领域存在:Mongo db条件查询
db.students.find({ $and: [ { first_name: /^Abc$/i }, { last_name: 'Xyz'},{email_id:'[email protected]'} ]})
的问题是,当我不给一个电子邮件ID,它认为电子邮件ID为空,并搜索相结合“ABC Firtis空”这么想的返回的任何结果查询, 正如我想要满足下面的情景: 我有一个学生的集合:
- FirstName: 1. ABC 2. ABC 3.ABC
- LastName: 1.XYZ 2. XY 3. XZ
- EmailID: [email protected] [email protected] [email protected]
如果在搜索时只输入第一个名字,它应该返回所有3个结果 如果用户输入名字和姓氏,它应该返回前两个结果,如果用户输入所有三个细节,它应该只返回1结果。
任何线索将不胜感激。
你似乎在谈论“输入”数据是用于查询不同的要问题,以及如何去构造查询忽略领域作为你没有输入标准。
这是所有关于如何收集输入的信息都是关于如何处理它的,但这一切都归结为你“有条件地构建”了查询(我只是一个数据结构),而不是静态定义一个查询,并以某种方式忽略null
或空数据。
所以,如果你有独立的变量,那么当测试值,并构建查询:
var firstName = "abc",
lastName = "xy,
email = null,
query = {};
if (firstName) {
query.firstName = new RegExp("^"+firstName,"i")
}
if (lastName) {
query.lastName = new RegExp("^"+lastName,"i")
}
if (email) {
query.email = new RegExp("^"+email,"i")
}
db.students.find(query)
这将创建一个查询对象,它最终会像这样的基础上,输入:
{ "firstName": /^abc/i, "lastName": /^xy/i }
因此,因为在email
中没有价值,所以不包括条件。最终结果是没有提供的条件甚至没有查询,然后你得到相关的匹配。
如果你有一些结构化的输入开始用同样的方法基本上简化:
var params = {
firstName = "abc",
lastName = "xy"
};
var query = {};
Object.keys(params).forEach(function(key) {
if (params[key])
query[key] = new RegExp("^"+key,"i");
});
db.students.find(query);
而且这是同样的事情,但因为你在一个地方的所有参数键,那么你可以遍历他们建立查询而不是单独测试。
这是通常的情况下,你有类似的网络请求输入参数,根据您的输入方法进入req.params
甚至req.body
的输入。因此,如果您将代码构造为接受类似对象的输入(或者已经拥有它),那么您可以使用它来构建查询。
还要注意的是所有 MongoDB的查询参数是隐式定义的“AND”条件,所以很少需要使用$and
,除非你明确地有多个条件,以满足同一文档属性。即使这样,通常会有更好的语法替代。
感谢您的精彩解释..思考相同的轨道.. :) –
没有必要给,你可以简单地尝试这种
发现({FIRST_NAME:{$正则表达式: '/ ^美国广播公司$/I'},姓氏: 'XYZ',EMAIL_ID: '的gd @他' }
在这种情况下,为什么要使用$和operator?只需使用db.students.find({first_name:/^abc $/i,last_name:'Firtis',email_id:'gd @ he'}) ' –
这可以作为一个或者,并且给我所有的3个结果即使我输入所有三个值 –