我有一个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数组中搜索匹配的字符串
答案 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);
});