Spring 与组 Trim 启动聚合
Spring boot aggregation with group Trim
考虑在字段中使用白色space 的集合,在数据库中如果有白色space 如果我们将它们分组为“Ravi”、“Ravi”,则视为总共2 个值。但它应该被视为单一价值。所以我在组中有 trim。我曾在DB表演过。但是我不知道如何在 Springboot 中 trim 和组值。我们可以在 Springboot 中为此使用聚合。但不知道如何使用 trim。请对此提供帮助
样本集:
[
{
"name": "ravi",
"DOB": "04-02-2000",
"Blood": "A1+"
},
{
"name": "ravi ",
"DOB": "05-03-2000",
"Blood": "A1+"
},
{
"name": "kumar ",
"DOB": "02-04-2000",
"Blood": "A1+"
},
{
"name": "kumar",
"DOB": "03-05-2000",
"Blood": "A1+"
}
]
MongoDB 操作:
db.collection.aggregate({
"$group": {
_id: {
$trim: {
input: "$name"
}
},
doc: {
"$first": "$$ROOT",
}
}
},
{
"$replaceRoot": {
"newRoot": "$doc"
}
})
输出:
[
{
"Blood": "A1+",
"DOB": "04-02-2000",
"_id": ObjectId("5a934e000102030405000000"),
"name": "ravi"
},
{
"Blood": "A1+",
"DOB": "02-04-2000",
"_id": ObjectId("5a934e000102030405000002"),
"name": "kumar "
}
]
无法通过标准 API。
解决方法: 我们需要在应用 $group
阶段之前向 trim 添加额外的 $addFields
name
字段。
@Autowired
private MongoTemplate template;
...
Aggregation agg = Aggregation.newAggregation(
Aggregation.addFields()
.addFieldWithValue("name", Trim.valueOf("name")).build(),
Aggregation.group("name")
.first("$$ROOT").as("doc"),
Aggregation.replaceRoot("doc")
);
...
template.aggregate(agg, inputType, outputType);
注意:由于你在第一阶段操作name
字段,MongoDB不会使用索引,所以我们可以添加一个额外的阶段到管道。
考虑在字段中使用白色space 的集合,在数据库中如果有白色space 如果我们将它们分组为“Ravi”、“Ravi”,则视为总共2 个值。但它应该被视为单一价值。所以我在组中有 trim。我曾在DB表演过。但是我不知道如何在 Springboot 中 trim 和组值。我们可以在 Springboot 中为此使用聚合。但不知道如何使用 trim。请对此提供帮助
样本集:
[
{
"name": "ravi",
"DOB": "04-02-2000",
"Blood": "A1+"
},
{
"name": "ravi ",
"DOB": "05-03-2000",
"Blood": "A1+"
},
{
"name": "kumar ",
"DOB": "02-04-2000",
"Blood": "A1+"
},
{
"name": "kumar",
"DOB": "03-05-2000",
"Blood": "A1+"
}
]
MongoDB 操作:
db.collection.aggregate({
"$group": {
_id: {
$trim: {
input: "$name"
}
},
doc: {
"$first": "$$ROOT",
}
}
},
{
"$replaceRoot": {
"newRoot": "$doc"
}
})
输出:
[
{
"Blood": "A1+",
"DOB": "04-02-2000",
"_id": ObjectId("5a934e000102030405000000"),
"name": "ravi"
},
{
"Blood": "A1+",
"DOB": "02-04-2000",
"_id": ObjectId("5a934e000102030405000002"),
"name": "kumar "
}
]
无法通过标准 API。
解决方法: 我们需要在应用 $group
阶段之前向 trim 添加额外的 $addFields
name
字段。
@Autowired
private MongoTemplate template;
...
Aggregation agg = Aggregation.newAggregation(
Aggregation.addFields()
.addFieldWithValue("name", Trim.valueOf("name")).build(),
Aggregation.group("name")
.first("$$ROOT").as("doc"),
Aggregation.replaceRoot("doc")
);
...
template.aggregate(agg, inputType, outputType);
注意:由于你在第一阶段操作name
字段,MongoDB不会使用索引,所以我们可以添加一个额外的阶段到管道。