基于mongodb的搜索分页
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);
    }
基于mongodb的搜索分页的更多相关文章
- #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案
		郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ... 
- 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类)
		近期工作中有使用到 MongoDb作为日志持久化对象,需要实现对MongoDb的增.删.改.查,但由于MongoDb的版本比较新,是2.4以上版本的,网上已有的一些MongoDb Helper类都是基 ... 
- 基于MongoDB.Driver的扩展
		由于MongoDB.Driver中的Find方法也支持表达式写法,结合[通用查询设计思想]这篇文章中的查询思想,个人基于MongoDB扩展了一些常用的方法. 首先我们从常用的查询开始,由于MongoD ... 
- SAP UI 搜索分页技术
		搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ... 
- 适用于app.config与web.config的ConfigUtil读写工具类     基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类)   基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式
		适用于app.config与web.config的ConfigUtil读写工具类 之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ... 
- 基于 Python 的自定义分页组件
		基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ... 
- 基于vue2.0的分页组件开发
		今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ... 
- php搜索分页
		最近做搜索分页的时候,发现第一页显示正常,点击到下一页的时候,显示结果变成了搜索全部内容. 仔细查看代码,发现当第一次输入关键词,提交到查询控制器的时候,表单提交的关键字不为空,可是点击到下一页的时候 ... 
- Yii 框架ajax搜索分页
		要想实现ajax搜索分页 其实很简单 第一步:在 Yii 框架自带的搜索和分页正常运行的情况下,在视图层 
随机推荐
- WIN10:IE浏览器的默认主页以及通过链接搜索的默认引擎
			主页设置: 地址栏搜索引擎: 
- JZ-054-字符流中第一个不重复的字符
			字符流中第一个不重复的字符 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g&q ... 
- 使用Three.js实现神奇的3D文字悬浮效果
			声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 在 Three.js Journey 课程示例中,提供了一个使用 Thre ... 
- SpringCloudStream(RabbitMQ&Kafka)&Spring-Kafka配置使用
			目录 是什么 解决问题 使用方式 创建生产者项目 pom yml 生产消息方法 接口 实现 创建消费者项目 pom yml 接收消息方法 重复消费 消费者yml 持久化 消费者负载个性配置(预拉取) ... 
- TCC分布式事框架务详解
			之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下.很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用. 所以这篇文章,就用大白话+手工绘图,并结合一 ... 
- Azure Container App(一)应用介绍
			一,引言 容器技术正日益成为打包.部署应用程序的第一选择.Azure 提供了许多使用容器的选项.例如,我们可以使用 Azure 容器注册表来存储和管理 Docker Images.Azure Cont ... 
- python 之 matplotlib 练习
			import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0,10,1000)# 自变量y = np.sin(x) + 1 # ... 
- mtu的原理和作用
			MTU: 最大传输单元,是指一种通信协议的某一层上面所能通过的最大数据包大小,最大传输单元这个参数通常与通信接口有关. 因为协议数据单元的包头和包尾的长度是固定的,MTU越大,则一个协议数据单元的承载 ... 
- bzoj4182/luoguP6326 Shopping(点分治,树上背包)
			bzoj4182/luoguP6326 Shopping(点分治,树上背包) bzoj它爆炸了. luogu 题解时间 如果直接暴力背包,转移复杂度是 $ m^{2} $ . 考虑改成点分治. 那么问 ... 
- 为什么你需要在用 Vue 渲染列表数据时指定 key
			本文改写整理自一篇博文,原文链接如下: Why you should use the key directive in Vue.js with v-for Application state and ... 
