美文网首页
MongoDB 获取数组字段的长度

MongoDB 获取数组字段的长度

作者: 天书笔记 | 来源:发表于2019-03-19 17:27 被阅读0次
如果有以下数据,我们想获取数字字段arrayfield的长度,该怎么办呢?
{ 
    "_id" : "test_id", 
    "array_field" : [
        "value1", 
        "value2", 
        "value3"
    ]
}

虽然我们可以直接查询该字段的内容然后获取其长度,但是当数据量大时性能就很差了。这里我们用聚合函数来获取。

Shell

db.test_collection.aggregate([{ "$match" : { "_id" : "test_id"}}, { "$project" : {"cnt":{"$size":"$array_field"} }} ])

Java

List<AggregationOperation> ops = new ArrayList<>();
ops.add(Aggregation.match(Criteria.where("_id").is("test_id")));
ops.add(Aggregation.project().and("array_field").size().as("cnt"));
List<Map> results = mongoTemplate.aggregate(Aggregation.newAggregation(ops), "test_collection", Map.class).getMappedResults();

以上是查询单条记录的数组字段长度。如果我们要批量查询所有记录的数组字段长度的列表呢?我们可以想当然的认为只要将$match修改一下就行了。但是很不幸,这样有很大的概率会报这样的错误信息

The argument to $size must be an Array, but was of type: EOO

这种情况其实很好解决,加上 ifNull 就行了
Shell

db.test_collection.aggregate([ { "$project" : { "cnt": { "$size": { "$ifNull": [ "$array_field", [] ] } } } } ])

Java

List<AggregationOperation> ops = new ArrayList<>();
ops.add(Aggregation.match(Criteria.where("_id").is("test_id")));
ops.add(Aggregation.project().and(ArrayOperators.Size.lengthOfArray(ConditionalOperators.ifNull("array_field").then(Collections.emptyList()))).as("cnt"));
List<Map> results = mongoTemplate.aggregate(Aggregation.newAggregation(ops), "test_collection", Map.class).getMappedResults();

相关文章

  • MongoDB 获取数组字段的长度

    如果有以下数据,我们想获取数字字段arrayfield的长度,该怎么办呢? 虽然我们可以直接查询该字段的内容然后获...

  • MongoDB获取数组的长度

    文档 需求 获取articleId为“559581876487065600”的文档中likedUsers数组的长度...

  • MongoDB 数组(Array)长度,大小,为空,等相关处理

    示例数据 一、获取数组长度 $size方法 二、按长度查找 1、指定长度字段为具体数值 2、指定长度字段为范围区间...

  • shell数组

    数组创建方法 输出整个数组 获取数组元素个数,方法与获取字符串长度的方法相同 获取数组单个元素的长度

  • Java--size()、length、length()

    size() : 获取泛型集合的长度 length : 获取数组的长度 length : 获取字符串的长度。

  • MongoDB查询条件-数组操作符 --- 2022-04-03

    本章节,介绍MongoDB关于JSON文档中的数组字段的匹配操作符。 MongoDB支持的数组查询条件 操作符说明...

  • 数组

    var names = ["one", "two"];1、获取数组的长度:数组名.length;2、数组长度可变化...

  • 像shell数组追加元素的小技巧

    因为shell 数组没有追加函数可以利用数组的长度来追加元素获取数组的长度:${#arr[*]}

  • JS笔记10:JS数组

    1、数组概念 获取数组长度 二维数组 2、获取数组元素 通过下标获取?多维数组如何提取console.log(ar...

  • Dart入门02 -- 数组与字典

    数组 Dart语言中,List类表示数组; 数组的初始化 数组的常用方法 获取数组长度 获取数组的第一个元素 获取...

网友评论

      本文标题:MongoDB 获取数组字段的长度

      本文链接:https://www.haomeiwen.com/subject/ppsnmqtx.html