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

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

相关推荐

  • MongoDB如何对数组中的元素进行查询详解

    前言 MongoDB是文档型数据库,每个文档(doc)表示数据的一项记录.相比关系型DB的row只能使用简单的数据类型,doc能够使用复杂的数据类型:内嵌doc,数组.MongoDB的数组是一系列元素的集合,使用中括号 [] 表示数组,例如:[1,2,3]的元素是整数值,[{name:"t5"}, {name:"t7"}],[ {name:"t5", age:21}, {name:"t7", age:22} ]的元素是doc.

  • mongoDB 多重数组查询(AngularJS绑定显示 nodejs)

    核心代码: js代码 var Lesson = Schema({ lessonName: String, intr: String, creTime: Date, sort: String, //分类 imgUrl: String, //封面地址 price: Number, teacher: String,//教师 subTitle:[{ lNo: Number, subLName: String, src: String, filtered: {type: Boolean, default:

  • mongodb 数据类型(null/字符串/数字/日期/内嵌文档/数组等)

    MongoDB的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null.布尔.数字.字符串.数组及对象). JSON的数据类型的局限性: 1.无日期类型,对日期型的处理较为繁琐 2.无法区分浮点数和整数.32位和64位 3.其他类型表示局限 如函数.正则式等 Mongodb使用BSON(Binary JSON)来组织数据,BSON还提供日期.32位数字.64位数字等类型.下面为在mongodb shell中这些类型在文档中是如何表示: 1.null  用于表示空

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

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

  • NumPy对数组按索引查询实战方法总结

    目录 前期准备及前情回顾 基础索引 一维数组 二维数组 神奇索引 一维数组 二维数组0 布尔索引(常用) 一维数据 二维数组 布尔索引条件的组合 总结 前期准备及前情回顾 #对于一维向量用np.arange生成以元组形式输出从0开始的数组([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) #对于二维向量(及多维向量),用np.arange生成以元组形式输出从0开始到20结束的数组,用np.reshape(4, 5)函数把一维向量转换为4行5列的二维向量 理解:numpy的二维向量对

  • ASP下的简洁的多重查询的方法与函数 真不错

    ASP简洁的多重查询的解决方案 复制代码 代码如下: 'subject 信息标题  'company 发布信息的公司名称  'content 发布信息的内容  'address 公司地址  'infomation 公司简介  'note 相关说明  以上值均由FORM提交,然后通过:subject=trim(Request.Form("subject"))等得到相应的值.  <%  '这个函数很关键!---------------------------  Function sq

  • javascript下利用数组缓存正则表达式的实现方法

    如果能用字面量创建正则就最好不过,显然有时我们不得不使用new RegExp()这种大消耗的创建方法,比如语法高亮与排版就大量用到正则表达式,要用到的patten越多,需要的时间就越长,火狐好像是12秒就发出警告,IE就直接假死.这时我们就需要利用组存大法要提高我们程序的性能了. 通常摆在我们眼前的如下两种选择来作为我们的容器,数组或对象.我这里选择前者,前者更轻量一点.下面我们就hasClass函数作性能改进. 原来的写法: 复制代码 代码如下: var hasClass = function

  • asp下去除数组中重复项的方法

    复制代码 代码如下: <%Function MoveR(Rstr) Dim i,SpStr SpStr = Split(Rstr,",") For i = 0 To Ubound(Spstr) If I = 0 then MoveR = MoveR & SpStr(i) & "," Else If instr(MoveR,SpStr(i))=0 and i=Ubound(Spstr) Then MoveR = MoveR & SpStr

  • PHP实现根据数组某个键值大小进行排序的方法

    本文实例讲述了PHP实现根据数组某个键值大小进行排序的方法.分享给大家供大家参考,具体如下: 问题:针对给定数组的某个键的键值进行排序 解决方法: //$a是排序数组,$b是要排序的数据集合,$result是最终结果 $b = array( array('name'=>'北京','nums'=>'200'), array('name'=>'上海','nums'=>'80'), array('name'=>'广州','nums'=>'150'), array('name'

  • 分享MongoDB修改oplog大小的4种方法

    目录 方法一 方法二 方法三 1.关闭mongod 2.修改配置文件 3.启动mongod实例,并备份oplog 4.重建oplog 5.插入前面保存的oplog时间点记录 6.关闭mongod实例 方法四 1.查看oplog大小 2.修改oplog大小 3.验证oplog大小 4.整理碎片,回收空间(可选) 修改oplog有四种方法: 方法一 步骤如下: 停掉所有secondary节点 主节点删除local目录下文件,副本节点删除数据目录下所有文件 修改所有节点的配置文件,如:oplogSiz

  • MongoDB排序时内存大小限制与创建索引的注意事项详解

    目录 参数internalQueryExecMaxBlockingSortBytes MongoDB 4.3的internalQueryMaxBlockingSortMemoryUsageBytes 排序字段如何加索引? 总结 线上服务的MongoDB中有一个很大的表,我查询时使用了sort()根据某个字段进行排序,结果报了下面这个错误: [Error] Executor error during find command :: caused by :: Sort operation used

  • AngularJS下对数组的对比分析

    Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都会返回false <script type="text/javascript"> alert([]==[]); alert([]===[]); </script> 要判断JS中的两个数组是否相同,需要先将数组转换为字符串,再作比较.以下两行代码将返回true <script type="text/javascript">

随机推荐