2017-05-09 4 views
0

Ich habe unten Dokument in MOngo DB und ich schrieb einen Java-Code, um Daten von innersten Element zu erhalten. Aus irgendeinem Grund gibt es mir keine Ergebnisse zurück.Verschachtelte Suche mit mondoDB Vorlage

Eingangsdaten

{ 
"_id": "59036b0fa036cc28c8e07db6", 
"srcName":"test1", 
"sections": [{ 
    "_id": "8769669696", 
    "data": [{ 
      "srcKey": "Bonds", 
      "rowIdx": 0, 
      "values": [{ 
        "srcDesc": "Assets", 
        "valuesNumber": 10000 
       }, 
       { 
        "srcDesc": "NonAssets", 
        "valuesNumber": 75500 
       }, 
       { 
        "srcDesc": "liabilities", 
        "valuesNumber": 1566 
       } 
      ] 
     }, 
     { 
      "srcKey": "01", 
      "rowIdx": 1, 
      "values": [{ 
       "srcDesc": "NonAssets", 
       "valuesNumber": 1566 
      }] 
     } 
    ] 
}] 
} 

Das Ergebnis, das ich will, ist wählen valuesNumber aus ... wo srcName = "test1" AND srcKey = "Bonds" AND srcDesc = "Assets"

Java-Code ist wie unten

AggregationOperation match=Aggregation.match(Criteria.where("srcName").in("test1") 
      .and("sections.data.values.srcDesc").in("Assets") 
      .and("sections.data.srcKey").in("Bonds")); 


    AggregationOperation unwind1=Aggregation.unwind("sections"); 
    AggregationOperation unwind2=Aggregation.unwind("sections.data"); 
    AggregationOperation unwind3=Aggregation.unwind("sections.data.values"); 

    Aggregation aggregation=Aggregation.newAggregation(match,unwind1,unwind2,unwind3,match); 

    BasicDBObject basicDBObject=mongoTemplate.aggregate(aggregation,"InsStatData",BasicDBObject.class).getUniqueMappedResult(); 
+0

Sie verweisen srcName unter Abschnitte in einem Teil und section.data. Einer der beiden ist falsch. Ich schätze, Sie müssen sections.srcName und nicht nur srcName referenzieren. Sie verweisen auch auf values.srcDesc ..., die eine mehrdeutige Referenz ist (alle drei heißen srcDesc). Es ist möglicherweise erwähnenswert, dass Sie möglicherweise Spring Data dafür verwenden möchten. Wäre es wesentlich weniger komplex für Sie, ein DTO-Objekt zu füllen und plain java zu verwenden, um zu erhalten, was Sie wollen. – Araymer

+0

@Araymer Meine Appologien, srcName ist außerhalb des Abschnitts. Es ist zusammen mit _id Feld. – Abhinav1singhal

+0

Ich habe gerade Ihren Code für das Beispieldokument ausgeführt und ich habe die 'valuesNumber' als 10000. Ihr Code sieht gut aus. Wie verifizieren Sie die Ergebnisse? – Veeram

Antwort

0

Es löste meine Frage. Ich musste nur ein korrektes Mapping durchführen, um Mapped-Ergebnisse zu erhalten. das war nicht im Originalcode. - user3516787 Just now edit

Verwandte Themen