MongoDB中如何获取数组的大小(长度)

文档


{    

    "_id" : "559581876459065623", 

    "articleId" : "559581876487065600",

    "likedUsers" : [

      {

            "userId" : "553535472413052928", 

            "time" : ISODate("2020-03-31T15:17:07.312+0000") 

      }, 

      {

            "userId" : "5496342767197265001", 

            "time" : ISODate("2020-03-31T16:20:02.633+0000")

      }   

  ]
}

 

需求

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

 

实现

Mongodb

"$match"指定匹配条件,“$project”指定要返回的字段(对于JSON来说是Key);“$size”用于求likedUser数组的大小(长度),对应字段是count(可以把它看做是SQL查询语句中AS后面的别名)

db.articleLikes.aggregate(

[

  {

      $match:{

        articleId: "559581876487065600"

      }

  }, 

{ 

      $project:{ 

          count: {

              $size: "$likedUsers"

          }

      }

  }

])

 

Java(Spring的MongoTemplate)

public Integer getLikedCount(String articleId) {

    // 查询条件

    AggregationOperation where = Aggregation.match(Criteria.where("articleId").is(articleId));

    // likedUsers为数组字段名称,count为结果字段的别名

    AggregationOperation project = Aggregation.project().andExpression("{$size: '$likedUsers'}").as("count");

    // 聚合操作

    List<AggregationOperation> operations = new ArrayList<>();

    operations.add(where);

    operations.add(project);

    Aggregation aggregation = Aggregation.newAggregation(operations); 



    / / 执行聚合操作,"articleLike"为集合名称,Document.class为返回结果类型

    AggregationResults<Document> results = mongoTemplate.aggregate(aggregation,"articleLike", Document.class);

    // 结果

    Document doc = results.getUniqueMappedResult();

    if(doc != null){

        return (Integer) doc.get("count");

    }

    return 0;

}

来自:https://www.spreadk.com/articles/562317261424168960

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值