MongoDB 以字符串值长度 或 数组元素个数 为条件查询

#以字符串长度为条件

在实际项目中常常会有根据字段值长度大小进行限制查询,例如查询商品名称过长或过短的商品信息,具体的实现方式可能有多种,在此记录常见的两种实现

使用 $where 查询(性能稍逊一些)

//查询商品名称长度大于25个字符的商品
db.item.find({item_name:{$exists:true},$where:"(this.item_name.length > 25)"}).limit(5)
 
//查询商品名称长度小于5个字符的商品
db.item.find({$where:"this.item_name.length < 5"}).limit(5)

使用正则表达式查询(性能比$where 高)

//查询商品名称长度大于25个字符的商品
db.item.find({"item_name": {"$exists": true, "$regex": /^.{25,}$/}}).limit(5)
 
//查询商品名称长度小于5个字符的商品
db.item.find({"item_name": {"$regex": /^.{0,5}$/}}).limit(5)

Java 使用 Spring data mongodb:

String pattern = String.format("^.{%s,}$", overlength);
Criteria criteria = Criteria.where("item_name").regex(pattern, "m");
 
Query query = new Query(criteria);
mongoTemplate.find(query, Item.class)

 

#以数组元素个数为条件

查询field名为test的字段,$size为3:

db.test.find({ "test" : { "$size" : 3 } }).limit(50);

查询数组test大小大于2的数据:

db.test.find({ "test.2" : { "$exists" : 1 } }).limit(50);

看网上说的另外一种是用$where如下

db.test.find({ $where: "this.test.length > 2" })

via:http://www.xuexiyuan.cn/article/detail/74.html & https://blog.csdn.net/gao36951/article/details/40678875

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值