• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

MongoDB下根据数组大小进行查询的方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

注意:作者使用的mongodb版本为2.4.7。

首先插入测试数据

复制代码 代码如下:

db.data.insert({name:'a', num:[12,123,22,34,1]});
db.data.insert({name:'b', num:[42,22]});
db.data.insert({name:'c', num:[49]});

键num对应的值是数组。

查询num的数组值具有指定大小的document

最好的方法是使用$size,例如指定大小为2,可以:

复制代码 代码如下:
db.data.find({num:{$size:2}})

不过$size有一个缺陷,就是无法查询某个范围的大小,例如下面的语句是无法按照预期运行的:
复制代码 代码如下:
db.data.find({num:{$size:{$gt:2}}}); //错误

官方文档中建议,如果需要查询的数组大小在某个范围,可以另外为每个文档添加一个键来保存当前数组的大小。

如果数组大小是某个范围

另外两种思路,第一个思路是使用$where,例如如果要求数组大小小于3:

复制代码 代码如下:
db.data.find({ $where: "this.num.length < 3" })

这种方法具有很大的灵活性,但是速度会慢一些。

关于$where,请参考官方文档:http://docs.mongodb.org/manual/reference/operator/query/where/。

另外一个比较高效的方法是判断数组中的某个指定索引的元素是否存在,例如如果要求数组大小小于3:

复制代码 代码如下:
db.data.find({ "num.2": {$exists:0} })

数组大小小于3,就意味着num[2]不存在。

如果要求数组大小大于3,可以:

复制代码 代码如下:
db.data.find({ "num.3": {$exists:1} })


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MySQL MGR 有哪些优点发布时间:2022-02-08
下一篇:
oracle中得到一条SQL语句的执行时间的两种方式发布时间:2022-02-08
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap