[英]How to store mongodb aggregate query result in spring mongotemplate?
[英]Spring MongoDB MongoTemplate Aggregate query, how to return a List<List<Object>>
我徒勞地搜尋,現在向群眾提出問題。
GpsRecord
的集合,每個GpsRecord
屬於一個TrackRecord
GpsRecord
都有一個引用其父TrackRecord
的ObjectId
TrackRecord.ids
列表查詢GpsRecord
集合 從這個查詢中,我想從List<List<GpsRecord>>
的聚合查詢返回List<List<GpsRecord>>
。 我的問題是如何在.aggregate(agg, GpsRecord.class, List<List<GpsRecord>>)
正確定義outputType
參數?
@Repository
public class GpsRepositoryImpl implements GpsRepositoryCustom {
private final MongoTemplate _mongoTemplate;
@Autowired
public GpsRepositoryImpl(MongoTemplate mongoTemplate) {
_mongoTemplate = mongoTemplate;
}
@Override
public List<List<GpsRecord>> aggregate(List<ObjectId> ids) {
MatchOperation match = getMatchOperation(ids);
GroupOperation group = getGroupOperation();
Aggregation agg = Aggregation.newAggregation(match, group);
return _mongoTemplate
.aggregate(agg, GpsRecord.class, List<List<GpsRecord>>)
.getMappedResults();
}
private MatchOperation getMatchOperation(List<ObjectId> ids) {
Criteria criteria = Criteria.where("trackRecord.id").in(ids);
return new MatchOperation(criteria);
}
private GroupOperation getGroupOperation() {
GroupOperation agg = Aggregation.group("trackRecord.id");
return agg;
}
}
編輯
GpsRecord的示例
{
"_id": ObjectId("593d382c5b3ae715b2cac03d"),
"_class": "gps",
"location": {
"type": "Point",
"coordinates": [116.315148, 39.984538]
},
"dateTime": ISODate("2008-10-23T02:54:40Z"),
"trackRecord": DBRef("trackRecords", ObjectId("593d382b5b3ae715b2cac029"))
}
跟蹤記錄示例
{
"_id": ObjectId("593d382b5b3ae715b2cac029"),
"_class": "track",
"name": "20081117155223.plt",
"bbox": {
"type": "Polygon",
"coordinates": [[[116.31949,39.999686],[116.325796,39.999686],[116.325796,40.009678],[116.31949,40.009678],[116.31949,39.999686]]]
}
}
TrackRecord
由許多GpsRecord
對象組成,成千上萬個甚至更多。
因此,根據List
的TrackRecord._id
我想返回一個List
的List<GpsRecord>
您想要這樣的聚合:
db.GpsRecord.aggregate([
{$group:{_id:"trackRecord.$id", ...}}
])
警告 :管道不能對以下類型的值進行操作:Binary,Symbol,MinKey,MaxKey, DBRef ,Code和CodeWScope
但是,如果您使用MongoDB> = 3.4.4,則有一個新的聚合命令$objectToArray
,它將DBRef
轉換為數組並允許您對其進行分組。
https://docs.mongodb.com/manual/release-notes/3.4/#apr-21-2017
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.