match中正则匹配字符串

  1. mongo
	// areaId满足12位数字
	"areaId": {
        "$regex": "^[0-9]{12}$"
      }
  1. Java
criteria =  criteria.and("areaId").regex("^[0-9]{12}$")

match中使用或条件

  1. mongo
"$match": {
      "$or": [
        {
          "administrativeRegion": {
            "$regex": "^500101",
            "$options": ""
          }
        },
        {
          "administrativeRegion": {
            "$regex": "^500102",
            "$options": ""
          }
        }
      ]
    }
  1. Java
criteria.orOperator(buildOrCriterias(queryParam.getRegions()));
private Criteria[] buildOrCriterias(String[] regions) {
        List<Criteria> criterias = new ArrayList<>(regions.length);
        for (String region : regions){
            criterias.add(Criteria.where(Constants.REGION).regex(START_PREFIX + AreaUtils.areaIdStartWith(region)));
        }
        return criterias.toArray(new Criteria[0]);
    }

project中截取字符串

  1. mongo
	// 将map集合queryData中的主键corporateChampionIndustry的值,截取前4位
	"groupItemId": {
        "$substr": [
          "$queryData.corporateChampionIndustry",
          0,
          4
        ]
      }
  1. Java
projectionOperation = projectionOperation
					.andExpression("substr('$queryData.corporateChampionIndustry',0,4)")
					.as("groupItemId");

project中数据类型转换

  1. mongo
	// 将rowIndicatorTexts.v的值转为double
	"value": {
        "$convert": {
          "input": "$rowIndicatorTexts.v",
          "to": "double",
          "onError": 0,
          "onNull": 0
        }
      }
  1. Java
projectionOperation = projectionOperation 
					.and(ConvertOperators.ToDouble.toDouble("$rowIndicatorTexts.v")).as("value"));

project取数组元数

  • mongo
//去除数组中的第一个元素,命名为value
"value": {
  "$arrayElemAt": [
    "$projectData.v",
    0
  ]
}
  • java
ArrayOperators.ArrayElemAt
.arrayOf("$projectData.v").elementAt(0)

project字符串拆分

  1. mongo
	// 将rowIndicatorTexts.v的值按逗号分隔
	"slaveIndicatorIds": {
        "$split": [
          "$rowIndicatorTexts.v",
          ","
        ]
      }
  1. java
projectionOperation = projectionOperation 
					.and(StringOperators.Split.valueOf("$rowIndicatorTexts.v").split(","))
                	.as("optionId")

project中使用switch case

  1. mongo
	// respondentTaskStatus默认为0,当respondentTaskStatus为1和2时为1
	"respondentTaskStatus": {
        "$switch": {
          "branches": [
            {
              "case": {
                "$eq": [
                  "$respondentTaskStatus",
                  "1"
                ]
              },
              "then": "1"
            },
            {
              "case": {
                "$eq": [
                  "$respondentTaskStatus",
                  "2"
                ]
              },
              "then": "1"
            }
          ],
          "default": "0"
        }
      }
  1. Java
		String[] respondentTaskStatus =  new String[]{"1","2"};
        int length = respondentTaskStatus.length;
        ConditionalOperators.Switch.CaseOperator[] caseOperators = 
        			new ConditionalOperators.Switch.CaseOperator[length];
        for (int i = 0; i < length; i++) {
            String respondentStatus = respondentTaskStatus[i];
            caseOperators[i] = 
            		ConditionalOperators.Switch.CaseOperator
            		.when(ComparisonOperators.valueOf("respondentTaskStatus")
            		.equalToValue(respondentStatus))
            		.then("1");
        }
        projectionOperation = projectionOperation
        					.and(ConditionalOperators.switchCases(caseOperators).defaultTo("0"))
        					.as("respondentTaskStatus");

group中的主键

不需要重命名

  1. mongo
 {
    "$group": {
      "_id": {
        "catalogItemId": "$catalogItemId",
        "indicator": "$indicator"
      },
      "count": {
        "$sum": "$value"
      }
    }
  }
  1. java
Aggregation.group("catalogItemId","indicator").sum("value").as("count")

需要重命名

  1. mongo
 {
    "$group": {
      "_id": {
        "indicator": "$rowIndicatorTexts.k",
        "slaveIndicatorId": "$rowIndicatorTexts.v"
      },
      "count": {
        "$sum": 1
      }
    }
  }
  1. java
List<Field> fields = new ArrayList<>();
fields.add(Fields.field("indicator","rowIndicatorTexts.k"));
fields.add(Fields.field("slaveIndicatorId","rowIndicatorTexts.v"));
Aggregation.group(Fields.from(fields.toArray(new Field[0])))
           				.count().as("count")

group不进行计算的字段

  1. mongo
{
   "$group": {
     "_id": "$_id",
     "respondentId": {
       "$last": '$respondentId'
     }
   }
 }
  1. java
groupOperation =  groupOperation 
   			     .last("respondentId").as("respondentId");

group合并多条数据的一个字段为数组

  1. mongo
 {
   "$group": {
     "_id": "$_id",
     "rowIndicatorTexts": 
       {"$push": '$rowIndicatorTexts' }
   }
 }
  1. java
groupOperation =  groupOperation 
   				 .push("rowIndicatorTexts").as("rowIndicatorTexts")
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐