2017-02-23 8 views
0

ich zu einer Gruppe versucht, ein Objekt basierend auf einer Abfrage mit Federdaten und mongodb, das ist, was ich tue, bis jetzt:Frühling Daten mongodb Gruppe Aggregation Objekt

MongoDB Daten:

{ 
"_id" : ObjectId("58af31feef34aa45476d2be9"), 
"_class" : "my.model.Image", 
"file" : "0006000.jpg", 
"number" : "123", 
"mkdius" : "Fiscalization 432", 
"status" : "UNCOMPLETED", 
"createdAt" : ISODate("2017-02-23T16:03:26.612-03:00") 
}, 
{ 
"_id" : ObjectId("58af31feef34aa45476d2bf3"), 
"_class" : "my.model.Image", 
"file" : "9781.jpg", 
"number" : "987", 
"mkdius" : "Fiscalization 432", 
"status" : "UNCOMPLETED", 
"createdAt" : ISODate("2017-02-23 16:03:26.866-03:00") 
}, 
{ 
"_id" : ObjectId("58af31feef34aa45476d2bea"), 
"_class" : "my.model.Image", 
"file" : "00016.jpg", 
"number" : "432", 
"mkdius" : "Fiscalization 4154", 
"status" : "UNCOMPLETED", 
"createdAt" : ISODate("2017-02-23T16:03:26.835-03:00") 
} 

Meine Aggregationsfunktion:

Aggregation aggregation = Aggregation.newAggregation(
    Aggregation.match(Criteria.where("status").is(Status.UNCOMPLETED)), // Match 
    Aggregation.group("mkdius").last("mkdius").as("mkdius").addToSet("id").as("imgsId"), // Grouping 
    Aggregation.project("imgsId").and("cd").previousOperation()); // Projecting 

AggregationResults<InitApp.result> groupResults = this.mongoTemplate.aggregate(aggregation, Image.class, InitApp.result.class); 

groupResults.getMappedResults().forEach(System.out::println); 

Ergebnis, das ich habe:

InitApp.result(mkdius=Fiscalization 432, imgIds=[58af31feef34aa45476d2be9,58af31feef34aa45476d2bf3] 

InitApp.result(mkdius=Fiscalization 4154, imgIds=[58af31feef34aa45476d2bea] 

Was ich erwarte:

InitApp.result(mkdius=Fiscalization 432, imgs=[{ 
"_id" : ObjectId("58af31feef34aa45476d2be9"), 
"_class" : "my.model.Image", 
"file" : "0006000.jpg", 
"number" : "123", 
"mkdius" : "Fiscalization 432", 
"status" : "UNCOMPLETED", 
"createdAt" : ISODate("2017-02-23T16:03:26.612-03:00") 
},{ 
"_id" : ObjectId("58af31feef34aa45476d2bf3"), 
"_class" : "my.model.Image", 
"file" : "9781.jpg", 
"number" : "987", 
"mkdius" : "Fiscalization 432", 
"status" : "UNCOMPLETED", 
"createdAt" : ISODate("2017-02-23 16:03:26.866-03:00") 
}] 

InitApp.result(cd=Fiscalization 4154, imgs=[{ 
"_id" : ObjectId("58af31feef34aa45476d2bea"), 
"_class" : "my.model.Image", 
"file" : "00016.jpg", 
"number" : "432", 
"mkdius" : "Fiscalization 4154", 
"status" : "UNCOMPLETED", 
"createdAt" : ISODate("2017-02-23T16:03:26.835-03:00") 
}] 

Ich weiß nicht, ob es möglich ist, zu tun, um die Daten aggregiert und in der Antwort das aktuelle Objekt gesetzt.

Danke.

Antwort

1

Ersetzen Sie Ihre $group Bühne mit

Aggregation.group("mkdius").last("mkdius").as("mkdius").push("$$ROOT").as("imgsId"), 

$$ROOT wird das gesamte Dokument schieben.

+0

Danke Mann, das ist genau das, was ich will !! – c0nf1ck

Verwandte Themen