用多列中的正则表达式进行mongoose搜索

时间:2014-07-06 06:53:40

标签: regex node.js mongoose

我有一个mongoose模型,模式定义为 -

var campusNotesSchema = mongoose.Schema({
    noteId:{type:String, unique:true, default: uuid.v4()},
    title: {type:String, required:'{PATH} is required!'},
    uploader:{type:String,required:'{PATH} is required!'},
    department:{type:String},
    college:{type:String},
    author:{type:String,required:'{PATH} is required!'},
    actualFileName: [String],
    storedFileName: [String],
    subject: {type:String},
    description: {type:String},
    details: {type:String},
    date: {type:Date, default: Date},
    tags: [String]
});

,模型定义为 -

var Campusnotes = mongoose.model('Campusnotes', campusNotesSchema);

现在我想在请求对象参数中搜索标题,标签,描述字段,如

if(req.query.searchText){        
    Campusnotes.find({title:new RegExp(searchText,'i'),description:new RegExp(searchText,'i')}).exec(function(err, collection) {
        res.send(collection);
    })
}

现在我如何确保在标题或描述中找到该术语的任何结果也包含在内,而不仅仅包括两者中的结果。 另外,我如何在tags数组中搜索匹配的字符串

2 个答案:

答案 0 :(得分:5)

您可以在mongoose中使用 $或运算符来返回匹配任一项的结果 $或 http://docs.mongodb.org/manual/reference/operator/query/or/

Campusnotes.find({'$or':[{title:new RegExp(searchText,'i')},{description:new RegExp(searchText,'i')}]}).exec(function(err, collection) {
    res.send(collection);
})

要在数组中搜索匹配的字符串,您需要使用mongo的$ in运算符:

$ in http://docs.mongodb.org/manual/reference/operator/query/in/

答案 1 :(得分:2)

使用此查询,$ option = i,将跳过大写/小写 当您将数据插入TAG数组时,首先将其设为小写,然后使用小写进行搜索,这将很容易。

Campusnotes.find({title:{'$regex':searchText,'$option':'i'},description:{'$regex':searchText,'$option':'i'},tags:searchText}, function(err, collection){
res.send(collection);
});