Mongoose条件查询指定属性的部分数据
今天撸代码的时候遇到了一个数据查询的问题,如何检索出数据库表中某个属性的指定的一些值,例如,数据表stable里面有个属性是status,它的值可能是a,b,c,d,我现在只需要检索出表中所有的status的值为a,b的数据,应该怎么实现?
之前写过检索数据库中的某些指定的属性的功能,这里先说一下如何实现这个需求,使用mongoose的model的select方法,就可以检索出需要的数据,有两种写法:
- model.select(“item1 item2 item3”);
在select方法里面传入需要检索的属性名,中间用空格隔开就可以了,这种写法比较直接,如果需要检索item1的子级属性a,可以直接写item1.a就可以了,如 model.select(“item1.a item2 item3”);
- model.select({item: 1, item2: 1, item: 0});
在select方法里面传入一个对象,1代表这个属性是需要检索的,0代表这个属性不需要检索,不需要检索的属性可以不用写。
这两种写法都可以实现,看个人喜好。
那么如何实现文章开始的问题呢,mongoose有个比较有意思的的写法,“$”,可以实现一些比较有意思的功能。
-
$ in可以解决这个问题,它的含义是一个键对应多个值,例如model.find({status: {$in:[a,b]}});它实现的就是检索出所有status的值为a,b的数据。
-
$ nin也可以解决这个问题,它的含义是一个键不对应指定的值,例如 model.find({status: {$nin:[c,d]}}); 它实现的是检索出所有status的值不为c,d的数据。
两种写法适用于不同的场景,各自可实现的作用也是不一样的。
我还整理了一些其他的写法,有需要的可以看看。
$lt 小于某个值 {age: {$lt: 30}}
$lte 小于等于某个值 {age: {$lte: 30}}
$gt 大于某个值 {age: {$gt: 30}}
$gte 大于等于 {age: {$gte: 30}}
$eq 等于 {age: {$eq: 30}}
$ne 不等于 {age: { $ne:24}}
$in 一个键对应多个值 {age: {$in:[20,30]}}
$nin 一个键不对应指定值 {age: {$nin:[20,30]}}
$or 多个条件匹配, 可以嵌套 $in 使用 {$or: [{name: "name"}, {age: 28}]}
$nor 查询与特定模式不匹配的文档
$exists 判断某些关键字段是否存在 {name: {$exists: true}}