1. 之前通过query和DBObject查询 但是返回的结果啊是没被筛选下来的 可以通过聚合函数来实现 废话不多说上代码
2.
List<AggregationOperation> operations = new ArrayList<AggregationOperation>(); operations.add(Aggregation.unwind("data")); operations.add(Aggregation.match(Criteria.where("data.step").is("20"))); operations.add(Aggregation.project("data.step").andExclude("_id")); Aggregation aggregation = Aggregation.newAggregation(operations); AggregationResults<String> results = mongoTemplate.aggregate(aggregation, "表名称", String.class);
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"
写的也比较粗略 但是仔细看看可以看得懂
1. 之前通过query和DBObject查询 但是返回的结果啊是没被筛选下来的 可以通过聚合函数来实现 废话不多说上代码2. List<AggregationOperation> operations = new ArrayList<AggregationOperation>(); operations.add(Aggregation.unwind("data")); operations.add(Aggregation.match(Criteria.where("data
嵌套查询语法格式带有IN谓词的子查询IN谓词实现交运算IN谓词实现差运算带有比较运算符的子查询带有ANY谓词的子查询带有ALL谓词的子查询相关子查询引用子查询的值不引用子查询的值(EXISTS)基于派生表的查询
SELECT 列名表达式
FROM 表名
WHERE 表达式 运算符 (SELECT 子查询)
其中运算符包含IN、关系运算符、ANY、ALL、EXISTS五类
1.SQL允许多层嵌套查询
2.子查询中不能使用ORDER BY子句(但可以使用GROUP BY等分组查询)
带有IN谓词的子查询
带有IN谓词的子查询指父查询与子查询之间用IN进行连接,判断某个属性列值是
public int syncTotal(Date startTime, Date endTime) {
int result = 0;
Criteria criteria = new Criteria().andOperator(Criteria.where("data_time").gte(startTime), Criteria.where("data_time").lte(endTime));
//创建aggreation
Aggregation aggregation= Aggregation.newAggregation(Aggregation.project("a_field", "b_field"));
List<Map> list = mongoOperations.aggregate(aggregation, "table", Map.class).getMappedResults();
二、投影排除字段
排除a_field和.
百度和谷歌中文搜索了各种答案没一个靠谱的
就说说百度上流传最广的一个互相抄袭的博客内容是这么写的
QueryBuilder queryBuilder = new QueryBuilder();
queryBuilder.or(new BasicDBObject("onumber", "002...
spring mongodb 嵌套查询,并反回指定的子集内容正常的mongoTemplate写法但是这种写法不能满足,会将符合查询要求的整行数据全部返回,包含所有的子集。
mongo 格式
正常的mongoTemplate写法
public JSONObject getData(EnumCollectionName collectionName, String dateType,DictOrg dictOrg){
Query query = Query.query(Criteria.wh
public void specialFieldQuery() {
Query query = new Query(Criteria.where("user").is("用户名blog"));
// 查询一条满足条件的数据
Map result = mongoTemplate.findOne(query, Map.class
MongoDB中的联表查询可以通过MongoTemplate的LookupOperation实现。下面是一个示例代码,展示了如何使用LookupOperation进行分页和排序:
```java
public Page<Order> getOrders(int page, int size, String sortBy) {
Sort sort = Sort.by(sortBy).ascending();
PageRequest pageRequest = PageRequest.of(page, size, sort);
LookupOperation lookupOperation = LookupOperation.newLookup()
.from("customer")
.localField("customerId")
.foreignField("_id")
.as("customer");
Aggregation aggregation = Aggregation.newAggregation(
lookupOperation,
Aggregation.sort(sort),
Aggregation.skip(pageRequest.getOffset()),
Aggregation.limit(pageRequest.getPageSize())
AggregationResults<Order> results = mongoTemplate.aggregate(
aggregation, "order", Order.class);
return new PageImpl<>(results.getMappedResults(), pageRequest, results.getUniqueMappedResults());
在上面的代码中,我们首先通过Sort参数指定排序方式,然后使用PageRequest设置分页参数。接着,使用LookupOperation创建联表查询,from指定要联接的表,localField指定本地表中用于引用外键的字段,foreignField指定外部表中要与本地表关联的字段,as指定结果中的别名。
然后使用Aggregation操作构建查询管道,包括联表查询、排序、分页等操作。最后,通过调用mongoTemplate的aggregate方法执行查询,并将结果封装为Page对象返回。
需要注意的是,查询结果将会是一个包含Order和Customer信息的嵌套对象,我们需要根据实际需求进行处理。
完美解决 Java Attempting to write a row[0] in the range [0,0] that is already written to disk
11045
m0_65625047:
JAVA对接小蓝鸟SDK问题
m0_65625047:
JAVA对接小蓝鸟SDK问题
假想象。: