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 相关文章推荐
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
解析jquery获取父窗口的元素
Jun 26 Javascript
JavaScript的setAttribute兼容性问题解决方法
Nov 11 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
Feb 12 Javascript
网页运行时提示对象不支持abigimage属性或方法
Aug 10 Javascript
jQuery不兼容input的change事件问题解决过程
Dec 05 Javascript
javaScript事件机制兼容【详细整理】
Jul 23 Javascript
js微信分享实现代码
Oct 11 Javascript
基于游标的分页接口实现代码示例
Nov 12 Javascript
vue eslint简要配置教程详解
Jul 26 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
VUEX采坑之路之获取不到$store的解决方法
Nov 08 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
wordpress之wp-settings.php
2007/08/17 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
PHP 文件类型判断代码
2009/03/13 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
python实现自动更换ip的方法
2015/05/05 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
python爬虫基础之urllib的使用
2020/12/31 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
班干部竞选演讲稿
2014/04/24 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
死亡证明书样本说明
2014/10/18 职场文书
结婚仪式主持词
2015/06/29 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
MySQL学习之基础命令实操总结
2022/03/19 MySQL