Как я могу реализовать запрос addFields mongoDB в Java - PullRequest
0 голосов
/ 12 ноября 2018

Я нашел несколько примеров в StackOverFlow, связанных с addFields в Aggregation. Но никто не реализовал в Java.

db.getCollection('myDocument').aggregate([
    {$match : {"metaId.ref.uuid" : "d6112808-1ce1-4545-bd52-cf55bc4ed25e"}},
    {$lookup: {from: "simple", localField: "someId.ref.uuid", foreignField: "uuid", 
    as: "simple"}},
    {"$unwind": "$simple"},
    {"$addFields": { "metaId.ref.name" : "$simple.name" }}
])

Я не могу правильно реализовать в Java: - Не получается правильная процедура

   LookupOperation lookupOperation =LookupOperation.newLookup().from("simple").localField("execId.ref.uuid").foreignField("uuid").as("simple");
            Aggregation myDocAggr = newAggregation(match(Criteria.where("metaId.ref.uuid").is(someUUID)), group("uuid").max("version").as("version"),
                    lookupOperation,
                    Aggregates.unwind(""),
                Aggregates.addFields(fields));
            Document document =new Document();
            AggregationResults<String> myDocAggrResults = mongoTemplate.aggregate(myDocAggr , myDocument, myDocument.class);
            List<String> mydocumentList = myDocAggrResults .getMappedResults();

Невозможно использовать unwind и addFields, это пример кода Java, но это не нормально. Пожалуйста, помогите мне. Заранее спасибо

1 Ответ

0 голосов
/ 12 ноября 2018

Вы смешиваете метод java-драйвера Aggregates с методами Spring Aggregation.

Также $addFields по-прежнему not supported в весеннем монго.

Вы должны использовать агрегацию ниже.

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
Aggregation myDocAggr = newAggregation(
       match(Criteria.where("metaId.ref.uuid").is(someUUID)), 
       group("uuid").max("version").as("version"),
       lookup("simple","execId.ref.uuid","uuid","simple"),
       unwind("simple"),
       new AggregationOperation(){ 
         @Override 
         public Document toDocument(AggregationOperationContext aoc) {
            return new Document("$addFields",new Document("metaId.ref.name","$simple.name"));
         }
      }
)
List<Document> mydocumentList=mongoTemplate.aggregate(myDocAggr,"myDocument",Document.class).getMappedResults();
...