1. 之前通过query和DBObject查询 但是返回的结果啊是没被筛选下来的 可以通过聚合函数来实现 废话不多说上代码
2. List
4. 结果就不贴了因为之前写的代码 懒得运行了 这里粗略解释一下吧
5. 这里就是返回外层对象
operations.add(Aggregation.unwind(“data”));
这里就是对对象内容的筛选吧 我是这样理解的 单独执行命令的时候筛选的时候 返回的是data内的数据
operations.add(Aggregation.match(Criteria.where(“data.step”).is(“20”)));
这里是指定返回的参数 后面是不返回ID 默认是会返回id的
operations.add(Aggregation.project(“data.step”).andExclude("_id"));
如果想分页的话加上这俩句就好了 就可以得到你想要的
operations.add(Aggregation.skip((currentPage - 1) * pageSize));
operations.add(Aggregation.limit(pageSize));
这里是在mongodb原生的
db.aaa.aggregate([{"$unwind":"$data"}, {"$match":{"data.step":"20"}},{"$project":{"data.step":1,"_id":0}}])
{
step: “20”
}
这是返回的结果 就筛选出来了
下面是我的数据格式
{
"_id": ObjectId("5eb4fda6c25d000069007213"),
"status": 0,
"message": "",
"supplierNum": "20140",
"ipoNo": "14111",
"data": [
{
"woNo": "4895",
"technologyRoute": "sasfafa11",
"step": "20",
"entityId": "5944",
"schedule": "1",
"testTime": "2020-04-12 13:20:30",
"content": {
"a": {
"number": "211",
"secWinInden": "22"
},
"b": {
"ironLoss": "AAA"
},
"c": {
"resBatch": "666",
"resSeq": "AAA"
},
"d": {
"ironLoss": "aa",
"MagInducInten": "bb"
}
}
},
{
"content": {
"a": {
"number": "11",
"secWinInden": "22"
},
"B": {
"ironLoss": "AAA"
},
"c": {
"resBatch": "666",
"resSeq": "AAA"
},
"d": {
"ironLoss": "aa",
"MagInducInten": "bb"
}
},
"entityId": "5944",
"schedule": "1",
"step": "30",
"technologyRoute": "sasfafa11",
"testTime": "2020-04-12 13:20:30",
"woNo": "4895"
}
]
}
写的也比较粗略 但是仔细看看可以看得懂