mongo $where length和$size的使用

首先看一下mongo的文档结构

在这里插入图片描述

1. 查询某个array的长度等于某值时,我们可以简单的使用$size 操作符。

查询timestamp的元素数量等于我们设置的值 可以这样写

db.xxx.find(
    {
        "$and": [
            {
                "timestampSet": {
                    "$size": 4
                }
            },
            {
                "xxxId": 10051
            }
        ]
    }
)

但是当我们查询timestamp的元素数量大于我们设置的值 以下这种方式不对

db.xxx.find(
    {
        "$and": [
            {
                "timestampSet": {
                    "$size": {
                        "$gt": 4
                    }
                }
            },
            {
                "xxxId": 10051
            }
        ]
    }
)

报错信息如下
在这里插入图片描述

但是我们还有其他方法来文档中集合获取大于某某值的文档
方法1
如果我们需要获取到文档中某数组元素的元素个数大于我们设置的值,我们可以用$where 和 length联合使用
db.xxx.find(
    {
        "$where": "this.timestampSet.length >= 4",
        "xxxId": 10051,
        
    }
)

结果如下:
在这里插入图片描述

java代码
		DBObject queryObject = (DBObject) JSON.parse("{}");
        queryObject.put("$where", "this.timestampSet.length >= " + cumulativeValue);
        BasicQuery query = new BasicQuery(String.valueOf(queryObject));
        query.addCriteria(Criteria.where("xxxId").is(xxxId));
        query.addCriteria(Criteria.where("xxxxId").is(xxxxId));
        List<xxx> filterList = mongoTemplate.find(query, xxx.class);
方法2
使用聚合操作 $aggregate
db.xxx.aggregate([
    {
        $project: {
            xxxId: 1,
			timestampSet:1,
            setSize: {
                $size: "$timestampSet"
            }
        }
    },
    {
        $match: {
            setSize: {
                $gt: 3
            }
        }
    }
])

查询结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值