按对象

时间:2015-08-17 18:09:42

标签: angularjs node.js mongodb express mongoose

我想通过JSON对象在数据库中进行搜索。

这是我的架构

var patientSchema = new Schema({
firstname: String,
lastname: String,
age: String,
tel: String,

work: [workSchema],

});

我的角度js请求,发送一个将是

的json对象
{'firstname':'value', 'lastname':'value', 'age':'age','tel':tel}

有没有办法直接在Patient Schema中搜索匹配? 所以如果json对象只包含firstname值,它将检查

在mysql中我会做,

SELECT * FROM patients WHERE firstname LIKE '%'.json.firstname AND .....

我测试的是

var filter = "{'firstname': 'value', 'lastname': 'value', 'age':'value', 'tel': 'tel'}" //sent from angularjs client

var jsonFilter = JSON.parse(filter);

Patient.find().or([
        { 'firstname': { $regex: new RegExp(filter.firstname,'i') }},
        { 'lastname': { $regex: new RegExp(filter.lastname,'i')  }},
        { 'age':{ $regex: new RegExp(filter.age,'i')  }},
        { 'tel':{$regex: new RegExp(filter.tel,'i')  }}]).exec(function(err, result) {

        if ( err)
            throw err;

        res.json(result);
    });

这个工作正常但是如果到达空是空的,那么所有数据都应该被填充它将返回未定义的,这将不会得到正确的数据。因为Angular JS只发送$ scope.data。

有没有办法通过我的json对象获取所有数据。而不是重写所有的json字段,因为我需要在这个项目中制作更大的过滤器。

谢谢

1 个答案:

答案 0 :(得分:0)

我不知道这是否是最好的方法,但这是一个开始。我会遍历您的密钥并动态构建您的查询。通过循环键,您可以根据需要添加任意数量的键。对于每个键,将新的正则表达式推送到查询变量。最后,将结果用作查询。

以下是代码:

var filter = {'firstname': 'value', 'lastname': 'value', 'age':'value', 'tel': 'tel'};
var query = {$or: []};
var keys = Object.keys(filter);

for(var i=0;i<keys.length;i++) {
    var item = {};
    item[keys[i]] = new RegExp(filter[key], 'i');
    query.$or.push(item);
}

Patient.find(query).exec(function(err, result) {
    if ( err)
        throw err;

    res.json(result);
});