首先看一下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
}
}
}
])
查询结果