最近项目中有个需求需要将存进mongoDBd的经纬度转换成数组取出,字符串数据格式为****,N,****,E,首先使用robo 3T写出命令,得出结果,然后再转换位java语言
命令如下:
db.getCollection('*******').aggregate([
{
$match:{
"position":{"$ne":null,$exists:true}
}
},
{
$group:{
_id : "$_id",
position:{$first:"$position"}
}
},
{
$addFields: {
'coord': {
$split: ['$position', ',']
}
}
}
])
查询截图:
转换为Java语言:
Criteria criteria = new Criteria();
criteria .andOperator(Criteria.where("position").exists(true),Criteria.where("position").ne(null)); Aggregation aggregation = Aggregation.newAggregation( Aggregation.match(criteria), Aggregation.group("id") .first("position").as("position"), new AggregationOperation(){ @Override public Document toDocument(AggregationOperationContext aoc) { List<String> split = new ArrayList() {{ add("$position"); add("."); }}; return new Document("$addFields",new Document("coord",new Document("$split",split))); } } ); List<HistoricalTrackBean> list = mongoTemplate.aggregate(aggregation, ****.class, HistoricalTrackBean.class).getMappedResults(); return list;
HistoricalTrackBean类属性如下:
接口返回结果: