mongoose如何根据参数是否为空来动态控制查询条件_mongoose 判断为空-程序员宅基地

技术标签: mongoose  mongodb  NodeJS  

    昨天在学习NodeJS的时候,写了一个接口,是需要根据pageNum、pageSize、keyword和typeid来做一个综合查询,在这个接口中,pageNum和pageSize是分页参数,有默认值一定不会传空,keyword是模糊搜索关键字,typeid是分类查询id,0代表全部,1、2、3、4分别代表不同类型,mongodb属于非关系型数据库,无法像mysql一样判断条件来拼接sql字符串,只能通过json格式来往里传条件,所以没法拼接。

    foodModel.find()是mongoose查询的方法,括号里可以传入一个json对象,用于传入查询条件,所以我在外面定义了一个query对象进行判断,通过判断参数是否为空来决定query中传什么属性,设置好后再执行find()方法,将query对象放入其中,即可实现根据参数是否为空来动态传条件查询。

    以下是接口的代码,仅供参考

router.get('/getAll', (req, res) => {
	let pageSize = req.query.pageSize || 5
	let pageNum = req.query.pageNum || 1
	let {keyword, typeid} = req.query

	let total = 0
	typeid = Number(typeid)
	console.log(`当前页:${pageNum},页尺寸:${pageSize},关键字:${keyword},类型id:${typeid}`)
	//构造一个查询条件对象,用于判断传入的参数是否为空(或者为 '' 或 0),根据不同的判断结果,构造不同的查询条件对象
	let query = {}

	let reg = new RegExp(keyword)
	if(keyword && !typeid) {
		query = {
			$or: [{name: {$regex: reg}}, {desc: {$regex: reg}}]
		}
	} else if(!keyword && typeid) {
		query = {
			typeid
		}
	} else if(keyword && typeid) {
		query = {
			$or: [{name: {$regex: reg}}, {desc: {$regex: reg}}], 
			typeid
		}
	}
	console.log(query)

	foodModel.find(query)
	.then((data) => {
		total = data.length
		return foodModel.find(query).limit(Number(pageSize)).skip(Number((pageNum - 1) * pageSize))
	}).then((data) => {
		let pageCount = Math.ceil(total/pageSize)
		res.send({err: 0, msg: '查询ok', data: { total: total, pageCount: pageCount, list: data}})
	}).catch((err) => {
		console.log('err:' + err)
		res.send({err: -1, msg: '服务器错误'})
	})
})

    当然,我作为一个使用了nodeJS没多久的小白,也只能想到这个办法了,希望对读者有帮助,当然,如果读者们有更好的办法,也欢迎分享给我,相互学习,共同进步

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cwkisasb/article/details/95459636

智能推荐

Linux用户管理详解_linux登录qq是什么意思-程序员宅基地

文章浏览阅读448次。Linux用户管理用户基本概念什么是用户用户指的是能够正常登录Linux或Windows系统,比如:登录QQ的用户、登入王者荣耀的用户、等等[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nz1edsjq-1626145230283)(C:\Users\李开开\AppData\Roaming\Typora\typora-user-images\image-20210712171546940.png)]为什么需要用户系统上的每一个进程(运行的程序),都_linux登录qq是什么意思

Unity中协程里Animator获取状态一些笔记_getanimatortransitioninfo-程序员宅基地

文章浏览阅读4.5k次,点赞4次,收藏7次。最近用Animator获取状态各种获取错误,所以记一下笔记Animator中可以获取三种不同的状态:GetCurrentAnimatorStateInfo 获取正确的状态机状态GetNextAnimatorStateInfo 获取下一个状态机的状态GetAnimatorTransitionInfo 获取状态机的过渡状态动画同步是在帧最前,而协程是在帧的最后调用。所以切换状态后在协程获取状..._getanimatortransitioninfo

LATEX 中参考文献顺序_spphys.bst-程序员宅基地

文章浏览阅读924次。\bibliography{report} % bibliography data in report.bib\bibliographystyle{unsrt} % makes bibtex use spphys.bstunsrt 表示按照引用的先后顺序进行排序_spphys.bst

Linux下部署maven-web项目,包括JDK安装、TOMCAT安装、MYSQL安装详细解释-程序员宅基地

文章浏览阅读335次。为什么80%的码农都做不了架构师?>>> ..._linux系统搭建maven+tomcat+mysql

effective stl 第18条: 避免使用vector<bool>-程序员宅基地

文章浏览阅读354次。vector不是容器,并且它不存储bool,因为他是按照位来存储的,即一个bool只占一个二进制位。假设有vector v;则&v[0]会引起编译错误。如果不使用&v[0]可以使用vector,否则,可以用deque 和bitset来替代_避免使用vector

Bug的严重程度(缺陷程度)有哪几种。。。。_bug严重程度-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏20次。Bug程度分为四种,分别为:致命S0:致命缺陷是指会造成安全问题的各类缺陷。在测试中很少出现,一旦出现立即中止版本测试。系统崩溃,数据丢失,数据毁坏,无法运行等Bug。严重S1:是指可以引起易于纠正的异常情况,可能引起易于修复的故障或对产品外观造成难以接受的缺陷。不影响其他功能的情况下可以继续版本测试。功能和性能不能实现。 次要功能全部丧失。 功能遗漏等等。 一般S2:一般缺陷是指不影响产品的..._bug严重程度

随便推点

《iOS 9 开发指南》——第1章,第1.3节工欲善其事,必先利其器——搭建开发环境...-程序员宅基地

文章浏览阅读202次。本节书摘来自异步社区《iOS 9 开发指南》一书中的第1章,第1.3节工欲善其事,必先利其器——搭建开发环境,作者 管蕾,更多章节内容可以访问云栖社区“异步社区”公众号查看1.3 工欲善其事,必先利其器——搭建开发环境iOS 9 开发指南图片 2 知识点讲解:光盘:视频知识点第1章搭建开发环境.mp4学习iOS 9开发也离不开好的开发工具的帮助,如果使..._(1)下载完成后单击打开下载的“.dmg”格式文件,然后双击xcode文件开始安装。

iView 3.3.2 发布,基于 Vue.js 的企业级 UI 组件库-程序员宅基地

文章浏览阅读115次。开发四年只会写业务代码,分布式高并发都不会还做程序员? iView 3.3.2 发布了,iView 是一套基于 Vue..._iview 3.2.2

详解not in与not exists的区别与用法(not in的性能并不差!)-程序员宅基地

文章浏览阅读93次。2019独角兽企业重金招聘Python工程师标准>>> ..._predicate not in查询

SpringBoot整合Spring Data JPA、MySQL、Druid并使用Mockito实现单元测试_spring jpa mock-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏7次。SpringBoot整合Spring Data JPA、MySQL、Druid并使用Mockito实现单元测试_spring jpa mock

java 解析excel金额_java解析Excel(xls、xlsx两种格式)-程序员宅基地

文章浏览阅读441次。package poi;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.LinkedHashMap;import j..._java getcellformatvalue

50个漂亮免费的 WordPress 主题(下)_wordpressbo'ke 免费-程序员宅基地

文章浏览阅读170次。50个漂亮免费的 WordPress 主题(上)Minimatica( Demo | Download )Placeholder( Demo | Download )Navly( Demo | Download )Cobera( Demo | Download )The Blog( Demo | Download )Gabi..._wordpressbo'ke 免费

推荐文章

热门文章

相关标签