数据库 
首页 > 数据库 > 浏览文章

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

(编辑:jimmy 日期: 2024/11/19 浏览:3 次 )

注意:作者使用的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} })

上一篇:MongoDB整库备份与还原以及单个collection备份、恢复方法
下一篇:MongoDB为用户设置访问权限
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 站点导航 SiteMap