2016-05-08 5 views
0

В моем проекте я использую SpringBoot 1.4.0-M2 и MongoDB 3.0Как сортировать по заданному значению в MongoDB

Я хочу реализовать сортировку.

У меня есть коллекция документов:

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

I случайное число из 19 - 22, позволяет делать вид, что номер у меня есть 21. Теперь я хочу заказать по недвижимости «возраст», используя мой 21.

Я хочу, чтобы иметь порядок, как этот 21,22,19,20 так будет, Эд, Тим, Джим

Знаете ли Вы, как сортировать таким образом?

С уважением!

ответ

1

Я не знаю способа достижения этой концепции «обертывания» в одном запросе, но вы можете сделать это в двух запросах. Приведенные ниже примеры загружают все в память, поэтому вам просто нужно немного изменить ситуацию, если вы хотите работать только по одному в случае очень больших коллекций.

Если вы используете родную MongoDB Java 3.x драйвера:

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); 

Если вы используете 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

Я должен сделать это в одном Querry, я думаю, что Я добавляю дополнительные свойства в своих документах для архивирования этого эффекта сортировки, что вы думаете об этом? – zaqpiotr

+0

Извините, но я не знаю, как вы могли бы достичь этого в одном запросе. Если вы не знаете, что случайное число опережает время, я не знаю, что вы могли бы внести в документы заблаговременно, чтобы помочь в этом. Можете ли вы поделиться, почему это должен быть единственный запрос? –

Смежные вопросы