2016-11-12 2 views
0

Ich versuche, Aggregates.project zu verwenden, um das Array in meine Dokumente zu schneiden. Meine Dokumente ist wiewie mongodb java-driver zu verwenden Projections.slice

{ 
"date":"", 
"stype_0":[1,2,3,4] 
} 

im mongochef wie the document

und mein Code in Java aussieht, ist:

Aggregates.project(Projections.fields(
           Projections.slice("stype_0", pst-1, pen-pst),Projections.slice("stype_1", pst-1, pen-pst), 
           Projections.slice("stype_2", pst-1, pen-pst),Projections.slice("stype_3", pst-1, pen-pst)))) 

schließlich bekomme ich Fehler

First argument to $slice must be an array, but is of type: int 

Ich denke, Das ist, weil das erste Element in stype_0 ist int, aber ich weiß wirklich nicht warum? Danke vielmals!

Antwort

2

Slice hat zwei Versionen. $slice(aggregation) & $slice(projection). Du benutzt den falschen.

Aggregat-Slice-Funktion hat keine integrierte Unterstützung. Unten ist ein Beispiel für eine solche Projektion. Machen Sie dasselbe für alle anderen Projektionsfelder.

BasicDBList stype_0 = new BasicDBList(); 
    stype_0.add("$stype_0"); 
    stype_0.add(1); 
    stype_0.add(1); 

    Bson project = Aggregates.project(Projections.fields(new BasicDBObject("stype_0", new BasicDBObject("$slice", stype_0)))); 

    AggregateIterable<Document> iterable = dbCollection.aggregate(Arrays.asList(project)); 
+0

oh, ich bin so unvorsichtig, vielen Dank – CXWorks

Verwandte Themen