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 相关文章推荐
Ext 今日学习总结
Sep 19 Javascript
Firefox中beforeunload事件的实现缺陷浅析
May 03 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
Jan 24 Javascript
jquery插件validate验证的小例子
May 08 Javascript
jQuery EasyUI datagrid实现本地分页的方法
Feb 13 Javascript
JS往数组中添加项性能分析
Feb 25 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
Dec 04 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
Jan 05 Javascript
仿百度换肤功能的简单实例代码
Jul 11 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
React Native之ListView实现九宫格效果的示例
Aug 02 Javascript
vuex操作state对象的实例代码
Apr 25 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
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
密码强度检测效果实现原理与代码
2013/01/04 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
Python与Redis的连接教程
2015/04/22 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
python3实现字符串操作的实例代码
2019/04/16 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
关于Python错误重试方法总结
2021/01/03 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
公益广告语集锦
2014/03/13 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
Python 正则模块详情
2021/11/02 Python
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技