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} })

时间: 2014-04-23

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

JS查找数组中重复元素的方法详解

本文实例讲述了JS查找数组中重复元素的方法.分享给大家供大家参考,具体如下: JS的数据类型有一个数组.今天我们就来谈谈对数组的一种处理.相信很多人都遇到过从数组中查找出不重复的元素,但是我遇到的却是从数组中查找出重复的元素. 从js数组中查找出不重复的元素的方法有很多,下面就给大家列举一个: <!DOCTYPE html> <html> <body> <script> Array.prototype.deleteEle=function(){ var ne

javascript sort()对数组中的元素进行排序详解

javascript sort()可以对数组中的元素进行排序, 语法格式:arrayObject.sort(sortby) arrayObject是数组对象,sortby为可选项,用来确定元素顺序的函数的名称,如果这个参数被省略,那么元素将按照ASCII字符顺序进行升序排列. 在没有使用比较函数进行排序时,sort方法是按字符的ASCII值进行排序的,先从第一个字符比较,如果第一个字符相等,再比较第二个字符,以此类推. 对于数值型数据,如果按照字符比较,得到的结果可能并不是我们想要的,因此需要借

Java中高效的判断数组中某个元素是否存在详解

一.检查数组是否包含某个值的方法 使用List public static boolean useList(String[] arr, String targetValue) { return Arrays.asList(arr).contains(targetValue); } 使用Set public static boolean useSet(String[] arr, String targetValue) { Set<String> set = new HashSet<Stri

对python numpy数组中冒号的使用方法详解

python中冒号实际上有两个意思:1.默认全部选择:2. 指定范围. 下面看例子 定义数组 X=array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]) 输出为5x4二维数组 第一种意思,默认全部选择: 如,X[:,0]就是取矩阵X的所有行的第0列的元素,X[:,1] 就是取所有行的第1列的元素 第二种意思,指定范围,注意这里含左不含右 如,X[:, m:n]即取矩阵X的所有行中的的第m到n-1列数据,含左不含右

vue更改数组中的值实例代码详解

根据下标更改时 vm为新建的vue对象 ind为数组 第一个e为在数组ind中e索引位置 第二个e为更改为值e vm.$set(vm.ind,e,e) 常规更改 arr为数组 //添加 arr.push(1); //删除 arr.splice(*,*); //替换 arr.splice(*,*,*); splice方法 实例 例子 1 在本例中,我们将创建一个新数组,并向其添加一个元素: <script type="text/javascript"> var arr = n

IOS开发之判断两个数组中数据是否相同实例详解

IOS开发之判断两个数组中数据是否相同实例详解 前言: 工作中遇到的问题,这里记录下,也许能帮助到大家 实例代码: NSArray *array1 = [NSArray arrayWithObjects:@"a", @"b", @"c", nil nil]; NSArray *array2 = [NSArray arrayWithObjects:@"b", @"a", @"c", nil

php in_array() 检查数组中是否存在某个值详解

php in_array() 检查数组中是否存在某个值 in_array检查数组中是否存在某个值 基本语法: bool in_array(mixed $needle,array $haystack,bool $strict=FALSE) 在 haystack 中搜索 needle 参数介绍 参数 描述 needle 必需.规定要在数组搜索的值.如果是字符串,则比较是区分大小写的. haystack 必需.规定要搜索的数组. strict 可选.如果设置该参数为 true,则 in_array()

Java编程实现统计数组中各元素出现次数的方法

本文实例讲述了Java编程实现统计数组中各元素出现次数的方法.分享给大家供大家参考,具体如下: package javatest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class NumOfEle { public static void main(String[] ar

利用js查找数组中指定元素并返回该元素的所有索引示例

前言 这篇文章主要给大家介绍的是利用js查找数组中指定元素并返回该元素的所有索引的相关资料,文中给出了详细的示例代码,下面话不多说,来看看详细的代码示例吧. 示例代码 //在数组中查找所有出现的x,并返回一个包含匹配索引的数组 function findall(a,x){ var results=[], len=a.length, pos=0; while(pos<len){ pos=a.indexOf(x,pos); if(pos===-1){//未找到就退出循环完成搜索 break; } r