node.js基于mongodb的搜索分页示例
mongodb模糊查询并分页
1.建立数据库
代码如下:
varmongoose=require('mongoose');
varshortid=require('shortid');
varSchema=mongoose.Schema;
varIndexDataSchema=newSchema({
_id:{
type:String,
unique:true,
'default':shortid.generate
},
type:String,
city:String,
name:string,
value:[{name:String,value:String}],
create:{type:Date,default:Date.now},
expand:String
});
IndexDataSchema.statics={
defaultSort:{'create':1},
defaultOptions:{'pageSize':0}
};
varIndexData=mongoose.model('IndexData',IndexDataSchema);
module.exports=IndexData;
页面布局这里只需要搜索框和搜索按钮,再点击按钮时,执行search()方法并发送请求
代码如下:
<divclass="searchPart">
<inputtype="text"class="form-control"id="txtSearch"placeholder="请输入项目名称">
<buttonclass="btnbtn-successsearch_btn"onclick="search()">搜索</button>
</div>
<script>
varpaginObj;
//设置每页显示页码
varpageSize=20;
//设置当前页码为1
varcurrentPage=1;
varcondition={'city':currentCityId,'name':''}
jQuery(document).ready(function(){
refresh();
});
//获取查找条件
functiongetCondition(){
varname=$('#txtSearch').val();
if(name&&name.trim()){
//{'$regex':name,'$options':'i'}}为模糊查询固定语法,name为参数
condition={'city':currentCityId,'name':{'$regex':name,'$options':'i'}};
}
else{
condition={'city':currentCityId}
}
returncondition;
}
//刷新页面
functionrefresh(){
//查找内容
$.get('/Manage/list/projects',{
'pageSize':pageSize,
'currentPage':currentPage,
'condition':getCondition()
},function(result){
appendData(result.data);
})
//查找个数
$.get('/Manage/listCount/projects',{'condition':condition},function(result){
paginObj=newDataPagin(document.querySelector('.projects-list'),result.count,{
'pageSize':pageSize,
'changePageFun':rquestPageData
});
})
}
//重新分页
functionrquestPageData(currentPage,callback){
$.get('/Manage/list/projects',{
'pageSize':pageSize,
'currentPage':currentPage,
'condition':getCondition()
},function(result){
appendData(result.data);
})
if(callback){
callback();
}
}
//改变页码,显示相应的内容
functionchangePage(paginObj,index){
paginObj.setPageNumber(index);
}
functionappendData(data){
//debugger;
varlist=$('.projects-list').children('tbody');
list.html('');
//页面显示模板
for(vari=0;i<data.length;i++){
.........
//此部分自己定义
})
}
//点击搜索按钮执行该方法
functionsearch(){
currentPage=1;
refresh();
}
</script>
到数据库查找并返回相应内容
varformidable=require("formidable");
varcommon=require('./common');
varpath=require("path");
varfs=require('fs');
varpath=require('path');
varguid=require('guid');
varshortid=require('shortid');
varAuctionHouse=require('./db/IndexData');
varfuns={
getList:function(collectionName,req,res,next){
varmainObj=transformCollctionName(collectionName);
if(!mainObj){
next();
}
varoptions=req.query;
varsort=options.sort||mainObj.defaultSort;
varpageSize=options.pageSize||mainObj.defaultOptions.pageSize;
varcurrentPage=options.currentPage||1;
varcondition=options.condition||{}
//此部分为查找条件
mainObj.find(condition).sort(sort).skip((currentPage-1)*pageSize).limit(pageSize).exec(function(err,docs){
if(err){
next(err);
}
returnres.json(common.returnData(true,docs));
})
},
countList:function(collectionName,req,res,next){
varmainObj=transformCollctionName(collectionName);
if(!mainObj){
next();
}
varcondition=req.query.condition||{}
mainObj.find(condition).count().exec(function(err,docs){
if(err){
next(err);
}
returnres.json({'count':docs});
})
},
HandleEvent:function(collectionName,actionsName,req,res,next){
varmainFuns=getCollctionFuns(collectionName)
if(!mainFuns){
next();
}
varfun=mainFuns[actionsName];
if(!fun){
next();
}
fun(req,res,next);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。