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 相关文章推荐
仿163填写邮件地址自动显示下拉(无优化)
Nov 05 Javascript
模拟多级复选框效果的jquery代码
Aug 13 Javascript
jquery使用remove()方法删除指定class子元素
Mar 26 Javascript
Javascript实现字数统计
Jul 03 Javascript
Javascript实现网络监测的方法
Jul 31 Javascript
第七章之菜单按钮图标组件
Apr 25 Javascript
javascript读取文本节点方法小结
Dec 15 Javascript
Vue 短信验证码组件开发详解
Feb 14 Javascript
json字符串对象转换代码实例
Sep 28 Javascript
使用vscode快速建立vue模板过程详解
Oct 10 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
利用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
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
python实现彩票系统
2020/06/28 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python中property和setter装饰器用法
2019/12/19 Python
Python-for循环的内部机制
2020/06/12 Python
Python with语句用法原理详解
2020/07/03 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
python实现经典排序算法的示例代码
2021/02/07 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
商务考察邀请函范文
2014/01/21 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
求职信范文怎么写
2015/03/19 职场文书
2015年班组工作总结
2015/04/20 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python