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

智能推荐

编程之道-1 需求分析_编程需求分析-程序员宅基地

文章浏览阅读587次。真正开始独立做软件的时候才明白当个小程序员是一件多么幸运的事情,只要关注的技术,关注效能,其它的一切可以由上级去考虑去安排.做需求分析蛮累人的,不同的公司,不同的分析师方法也不一样,但总体来说,指理解用户需求,就软件功能与客户达成一致,估计软件风险和评估项目代价,最终形成开发计划的一个复杂过程。在我们公司来说呢,有专门的跟用户沟通和获取相关信息的同事,这种做法在于程序员可以专心做程序,不用_编程需求分析

js中typeof和instanceof的区别+必须熟记于心的JavaScript数据类型 — 第3.4 章_typeof 3 + 4-程序员宅基地

文章浏览阅读630次。typeof和instanceof的区别 +JS数据类型  相信大家学习了,很多门编程语言,但是扪心自问一下,你真的很了解你所学的语言吗?对于写了这么长时间js的我来说,这是第一次能够静下心来,真正为了学习而学习的时候! 就拿JavaScript语言来说,它虽然是一门弱类型语言,但是,我认为,不管它是什么语言,至少在我们学习的时候,要清楚地记得,它的数据类型分哪几类,每一类又分为哪几种! 废话不_typeof 3 + 4

常用网站资源_常用网站 csdn-程序员宅基地

文章浏览阅读1.1k次。原链接:http://blog.chinaunix.net/u3/105477/showart_2181545.html (一). NS常用基本网站: 1. Maillist :寻求问题答案最好的地方 http://mailman.isi.edu/pipermail/ns-users/ 2._常用网站 csdn

JavaScript富文本编辑器HTML特殊字符转义MYSQL报错_js字符串转义导致的插入数据失败-程序员宅基地

文章浏览阅读1.4k次。最近在做一个博客,后台用的富文本编辑器,编辑完成后以html形式获取代码,获取到的html代码中部分特殊字符没有转义导致数据库插入语句报错。富文本编辑器中内容:(代码里用的英文单引号)直接获取到的html代码:(未经任何处理)<p style="text-align: center;"> <span style="font-weight: bold;">标题<..._js字符串转义导致的插入数据失败

php curl指定远端IP_php curl hostip-程序员宅基地

文章浏览阅读4.1k次。<?php$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'http://192.168.0.66/indexdata/');curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: www.domain.com'));$response = curl_exec($ch);if (curl_errn_php curl hostip</div>

VM虚拟机BT5下对usb无线网卡的配置_bt5虚拟机调用usb网卡-程序员宅基地

文章浏览阅读4.9k次。准备东西1.BT5-GNOME-VM-32 (最好直接使用网上别人配置好的bt5 VM版,不要自己配置,百度搜应该搜得到,有兴趣的可以试试yeslab教主配置的bt5)2.usb无线网卡,我的是wna31003.相应usb网卡的驱动程序,一般网卡商都有提供,百度搜自己的驱动4.ndiswrapper软件准备就这么多。4样东西,绝对都有,没usb网卡要自己买的。本机自带的网卡是无_bt5虚拟机调用usb网卡

随便推点

mybatis mysql 中文乱码问题_mybatis xml select ifnull 中文乱码-程序员宅基地

文章浏览阅读1.6k次。在spring+mybatis开发中 遇到插入中文字符数据变成问号的问题1、一般第一步可能会去看spring项目中的web.xml是否设置了字符过滤器但是一看代码已经拷贝过来了啊 ┭┮﹏┭┮2、那会不会是tomcat中没有设置字符的问题?于是打开server.xml空欢喜 还是设置过了啊 ┭┮﹏┭┮3、对了还有个地方可能出问题 那就是数..._mybatis xml select ifnull 中文乱码

Qt_qt qgr-程序员宅基地

文章浏览阅读1.6k次。Qt维基百科,自由的百科全书Qt使用Qt Designer做GUI设计开发者Qt Project、诺基亚、Digia、KDE稳定版本5.0.1[1]/2013年1月31日;41天前预览版本5.0 RC2/2012年12月6日;3个月前编程语言_qt qgr

杂文笔记(三):CSI的线性相位去噪及其python实现_csi相位-程序员宅基地

文章浏览阅读6.7k次,点赞12次,收藏82次。目录1. CSI相位信息2. 线性相位去噪(两步:解卷绕+线性变换)1. CSI相位信息  测量到的第i个子载波上的CSI相位信息θ~i\tilde{\theta}_{i}θ~i​:θ~i=θi+2πKiΔtN+β+Zf\tilde{\theta}_{i}=\theta_{i}+\frac{2 \pi K_{i} \Delta t}{N}+\beta+Z_{f}θ~i​=θi​+N2πKi​Δt​+β+Zf​其中θi\theta_{i}θi​为真实相位,Δt\Delta tΔt为定时误差,β\be_csi相位

全面揭秘!火山引擎边缘 IaaS 混合部署架构实践_latepost 火山组织架构-程序员宅基地

文章浏览阅读312次。2023年6月16日-17日 51CTO WOT全球技术创新大会在北京成功举办。会上,火山引擎边缘计算架构师郭少巍与多位行业资深专家,共同探讨边缘云行业技术架构以及云原生与边缘计算的发展和展望。_latepost 火山组织架构

使用charles抓取手机APP的数据包,https请求一样能抓取-程序员宅基地

文章浏览阅读1.3k次。在开发过程中,经常会遇到真机调试的场景,但是受环境限制,只能使用数据抓包的办法来查看http请求的数据结果和状态,下面就为大家介绍一款非常好用的数据抓包工具及使用方法;工具介绍Charles 是一款收费的抓包修改工具,易上手,数据请求容易控制,修改简单,抓取数据的开始暂停方便等优势!下载地址:https://www.charlesproxy.com/download/1.下载...

DMA框架介绍(1)_arm dma框架-程序员宅基地

文章浏览阅读1k次。对SMMU驱动已经熟悉了一段时间,接下来计划对相关的内容进行分析。内核DMA框架用于将内存物理地址PA进行映射为设备可访问的IOVA,并对驱动提供API可用接口。它包括IOVA框架(包括IOVA的分配和释放)、IOMMU框架(DMA MAP/UNMAP过程)、页表操作、ARM SMMU驱动及提供给驱动的框架。..._arm dma框架