2017-12-12 3 views
0

Ich bin auf der Suche nach einer Möglichkeit, Graphlookup mit Java in einer Resful Web API zu implementieren. Ich versuche, die Hierarchie wie auf der MongoDB (https://docs.mongodb.com/v3.4/reference/operator/aggregation/graphLookup/)

{ "_id" : 1, "name" : "Dev" } 
    { "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" } 
    { "_id" : 3, "name" : "Ron", "reportsTo" : "Eliot" } 
    { "_id" : 4, "name" : "Andrew", "reportsTo" : "Eliot" } 
    { "_id" : 5, "name" : "Asya", "reportsTo" : "Ron" } 
    { "_id" : 6, "name" : "Dan", "reportsTo" : "Andrew" } 

Dies ist der Arbeitnehmer Sammlung zu implementieren, was ich will, ist in der Lage sein, diese Struktur in MongoDB

{ 
    "_id" : 1, 
    "name" : "Dev", 
    "reportingHierarchy" : [ ] 
} 
{ 
    "_id" : 2, 
    "name" : "Eliot", 
    "reportsTo" : "Dev", 
    "reportingHierarchy" : [ 
     { "_id" : 1, "name" : "Dev" } 
    ] 
} 
{ 
    "_id" : 3, 
    "name" : "Ron", 
    "reportsTo" : "Eliot", 
    "reportingHierarchy" : [ 
     { "_id" : 1, "name" : "Dev" }, 
     { "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" } 
    ] 
} 

I gespeichert zu erstellen habe gesehen Beispiele, wie dies für die Aggregation, aber nichts auf graphlookup

Aggregation agg = newAggregation(
     match(Criteria.where("pageId").is("2210")), 
     unwind("postIds"), 
     group("_id").sum("1").as("sum") 
     //project("$sum").and("pageId").previousOperation() 
    ); 

gibt es eine Möglichkeit graphlookup in ein Format wie diese zu bekommen? Wo anstelle von Match, Abwickeln, Gruppe, kann ich GraphLookupOperation und dann so etwas wie Kartenergebnis verwenden.

Antwort

0

Sie können unter dem folgenden Code versuchen.

GraphLookupOperation graphLookupOperation = GraphLookupOperation.builder() 
    .from("employees") 
    .startWith("reportsTo") 
    .connectFrom("reportsTo") 
    .connectTo("name") 
    .as("reportingHierarchy"); 
Aggregation aggregation = Aggregation.newAggregation(graphLookupOperation); 
List<Document> results = mongoOperations.aggregate(aggregation, "employees", Document.class).getMappedResults() 
+0

Das wäre gut, aber es ist ein Fehler mit .as, es sagt, kann nicht zugreifen. – Andrew

+0

Ich bekomme keinen solchen Fehler auf 1.10.6 Feder Mongo. In welcher Frühlings-Mongo-Version bist du? – Veeram

0
AggregationOperation aggregationOperation = new AggregationOperation() { 
     @Override public DBObject toDBObject(AggregationOperationContext aggregationOperationContext) { 
      DBObject graphLookup = new BasicDBObject(
        "from", "individual").append(
        "startWith", "$reportsTo").append(
        "connectFromField", "reportsTo").append(
        "connectToField", "firstName").append(
        "maxDepth", 2).append(
        "as", "reportingHierarchy"); 
      return new BasicDBObject("$graphLookup", graphLookup); 

Dieser Code für dieses Problem zu umgehen können, da ich eine ältere Version bin mit, ich glaube 1.10.0 Frühjahr Mongo. Jetzt habe ich die Probleme der "ReportingHierarchy" nicht so, wie ich es will. Es gibt mir keinen Namen. Nur reportsTo und ReportingHierarchy, das auch _class enthält, was ich nicht will.

Verwandte Themen