node.js基于mongodb的搜索分页示例


Posted in Javascript onJanuary 22, 2017

mongodb模糊查询并分页

1.建立数据库

代码如下:

var mongoose = require('mongoose');
var shortid = require('shortid');
var Schema = mongoose.Schema;

var IndexDataSchema = new Schema({
  _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}

};


var IndexData = mongoose.model('IndexData', IndexDataSchema);

module.exports = IndexData;

页面布局 这里只需要搜索框和搜索按钮,再点击按钮时,执行search()方法并发送请求

代码如下:

<div class="searchPart">
          <input type="text" class="form-control" id="txtSearch" placeholder="请输入项目名称">
          <button class="btn btn-success search_btn" onclick="search()">搜索</button>
        </div>
        <script>
  var paginObj;
  
  //设置每页显示页码
  var pageSize = 20; 
   
  //设置当前页码为1
  var currentPage = 1;
  
  var condition = {'city': currentCityId, 'name': ''}
  jQuery(document).ready(function () {
    refresh();
  });
  
 //获取查找条件
  function getCondition() {
    var name = $('#txtSearch').val();
    if (name && name.trim()) {
    // {'$regex': name, '$options': 'i'}}为模糊查询固定语法,name为参数
      condition = {'city': currentCityId, 'name': {'$regex': name, '$options': 'i'}};
    }
    else {
      condition = {'city': currentCityId}
    }
    return condition;
  }
  
   //刷新页面
  function refresh() {
  
  //查找内容
    $.get('/Manage/list/projects', {
      'pageSize': pageSize,
      'currentPage': currentPage,
      'condition': getCondition()
    }, function (result) {
      appendData(result.data);
    })

//查找个数
    $.get('/Manage/listCount/projects', {'condition': condition}, function (result) {
      paginObj = new DataPagin(document.querySelector('.projects-list'), result.count, {
        'pageSize': pageSize,
        'changePageFun': rquestPageData
      });
    })
  }

//重新分页
  function rquestPageData(currentPage, callback) {
    $.get('/Manage/list/projects', {
      'pageSize': pageSize,
      'currentPage': currentPage,
      'condition': getCondition()
    }, function (result) {
      appendData(result.data);
    })
    if (callback) {
      callback();
    }
  }

//改变页码,显示相应的内容
  function changePage(paginObj, index) {
    paginObj.setPageNumber(index);
  }

  function appendData(data) {
    //debugger;
    var list = $('.projects-list').children('tbody');
    list.html('');
    // 页面显示模板
    for (var i = 0; i < data.length; i++) {
    
      .........
      //此部分自己定义
      
   
    })
  }

 
   //点击搜索按钮执行该方法
  function search() {
    currentPage = 1;
    refresh();
  }


</script>

到数据库查找并返回相应内容

var formidable = require("formidable");
  var common = require('./common');
  var path = require("path");
  var fs = require('fs');
  var path = require('path');
  var guid = require('guid');
  var shortid = require('shortid');
  
  var AuctionHouse = require('./db/IndexData');


 var funs = {
  getList: function (collectionName, req, res, next) {
    var mainObj = transformCollctionName(collectionName);
    if (!mainObj) {
      next();
    }
    var options = req.query;
    var sort = options.sort || mainObj.defaultSort;
    var pageSize = options.pageSize || mainObj.defaultOptions.pageSize;
    var currentPage = options.currentPage || 1;
    var condition = options.condition || {}
    
    //此部分为查找条件
    mainObj.find(condition).sort(sort).skip((currentPage - 1) * pageSize).limit(pageSize).exec(function (err, docs) {
      if (err) {
        next(err);
      }
      return res.json(common.returnData(true, docs));
    })
  },
  countList: function (collectionName, req, res, next) {
    var mainObj = transformCollctionName(collectionName);
    if (!mainObj) {
      next();
    }
    var condition = req.query.condition || {}
    mainObj.find(condition).count().exec(function (err, docs) {
      if (err) {
        next(err);
      }
      return res.json({'count': docs});
    })
  },
  HandleEvent: function (collectionName, actionsName, req, res, next) {
    var mainFuns = getCollctionFuns(collectionName)
    if (!mainFuns) {
      next();
    }
    var fun = mainFuns[actionsName];
    if (!fun) {
      next();
    }
    fun(req, res, next);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
js实现圆盘记速表
Aug 03 Javascript
易操作的jQuery表单提示插件
Dec 01 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
原生js实现图片放大缩小计时器效果
Jan 20 Javascript
详解webpack打包vue时提取css
May 26 Javascript
JS运动特效之链式运动分析
Jan 24 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
JS实现TITLE悬停长久显示效果完整示例
Feb 11 Javascript
解决vue页面渲染但dom没渲染的操作
Jul 27 Javascript
利用JS实现文字的聚合动画效果
Jan 22 #Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 #Javascript
jQuery实现的分页功能示例
Jan 22 #Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 #Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 #Javascript
前端开发必知的15个jQuery小技巧
Jan 22 #Javascript
Vue.js学习之过滤器详解
Jan 22 #Javascript
You might like
php5数字型字符串加解密代码
2008/04/24 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
python字典的常用方法总结
2019/07/31 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
Python如何批量生成和调用变量
2020/11/21 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
警察先进个人事迹材料
2014/05/16 职场文书
买房子个人收入证明
2014/10/12 职场文书
2014年纪检工作总结
2014/11/12 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书