MongoDB按每个单词的第一个字母搜索字符串

时间:2017-05-02 18:20:27

标签: node.js mongodb

我有一个mongo架构如下。

var employeeSchema = new mongoose.Schema({
 id: { type: String,ref:'Users' },
 FirstName: { type: String },
 LastName: { type: String },
 Skills: [
    {
        Category: { type: String },
        Level: { type: String }
    }
 ]}, { strict: true });

输入数据后,它看起来像这样。

{
id: '123456',
FirstName: "Name",
LastName: "Last Name",
Skills: [
    {
        Category: "Traffic Management Supervisor ",
        Level: "Intermediate"
    }
]

}

我的问题我想根据他的技能类别过滤雇主。我希望按照每个单词的第一个字母过滤员工,而不是输入整个字符串

Ex:我需要使用 TMS 而非流量管理主管

按技能类别过滤所有员工

1 个答案:

答案 0 :(得分:2)

您可以在聚合方法中使用正则表达式匹配。我建议您应该动态创建这些搜索。无论输入是什么,并将它们推入$或正则表达式...

// Only filter by category field
Employee.aggregate([{
    $match: {
        "Skills.Category": {
            $regex: '[tms]+',
            $options: 'i'
        }
    }

}])

// Any category match
Employee.aggregate([{
    $match: {

        $or: [{
            "Skills.Category": {
                $regex: '[tms]+',
                $options: 'i'
            }
        }, {
            "Skills.Level": {
                $regex: '[tms]+',
                $options: 'i'
            }
        }]

    }

}])