2016-05-08 10 views
0

In meinem Projekt verwende ich SpringBoot 1.4.0-M2 und MongoDB 3.0Wie durch definierte Wert in mongodb

I Sortierung implementieren möchten sortieren.

Ich habe Sammlung von Dokumenten:

{ 
"name":"Tim", 
"age":19 
} 
,{ 
"name":"Jim", 
"age":20 
} 
,{ 
"name":"Will", 
"age":21 
} 
,{ 
"name":"Ed", 
"age":22 
} 

I Zufallszahl 19-22, lässt so tun, dass eine Reihe bekam ich habe, ist 21 Jetzt habe ich von „Alter“ Eigentum bestellen möchten mit meinem die 21 Wert.

Ich möchte ähnliche 21,22,19,20 haben, um so Will, Ed, Tim, Jim

Wissen Sie, wie auf diese Weise zu sortieren?

Mit freundlichen Grüßen!

Antwort

1

Ich kenne keinen Weg, um dieses "Wrapping-Sort" -Konzept in einer einzigen Abfrage zu erreichen, aber Sie könnten es in zwei Abfragen tun. In den folgenden Beispielen wird alles in den Speicher geladen. Sie müssten also nur etwas umstellen, wenn Sie nur bei sehr großen Sammlungen einzeln arbeiten möchten.

Wenn Sie die native MongoDB Java-Treiber 3.x verwenden:

int age = 21; 
DBObject ageSort = new BasicDBObject("age", 1) 
List<Document> results = new ArrayList<>(); 
mongoCollection.find(new BasicDBObject("age", new BasicDBObject("$gte", age))) 
       .sort(ageSort) 
       .forEach((Block<Document>) results::add); 
mongoCollection.find(new BasicDBObject("age", new BasicDBObject("$lt", age))) 
       .sort(ageSort) 
       .forEach((Block<Document>) results::add); 

Wenn Sie mit Spring Data MongoDB:

int age = 21; 
Sort ageSort = new Sort(new Sort.Order(Sort.Direction.ASC, "age")) 
List<Map> results = mongoTemplate.findAll(
    new Query(Criteria.where("age").gte(age)).with(ageSort), 
    Map.class 
); 
results.addAll(mongoTemplate.findAll(
    new Query(Criteria.where("age").lt(age)).with(ageSort), 
    Map.class 
)); 
+0

Ich habe dies in einzelnen querry zu tun, ich denke, dass Ich füge zusätzliche Eigenschaften in meine Dokumente ein, um diesen Sortiereffekt zu archivieren, was denkst du darüber? – zaqpiotr

+0

Sorry, aber ich weiß nicht, wie Sie das in einer einzigen Abfrage erreichen können. Wenn Sie nicht wissen, was die Zufallszahl im voraus ist, weiß ich nicht, was Sie im Voraus in die Dokumente schreiben könnten, um dabei zu helfen. Können Sie teilen, warum dies eine einzige Abfrage sein muss? –

Verwandte Themen