如何按mongodb中的定义值排序

时间:2016-05-08 14:29:59

标签: spring mongodb spring-boot

在我的项目中,我使用的是SpringBoot 1.4.0-M2和MongoDb 3.0

我想实现排序。

我收集了文件:

<property>
<name>hive.aux.jars.path</name>
<value>file://localpath/yourjar.jar</value>
</property>

我是从19 - 22的随机数,让我假装我得到的数字是21。 现在我想用“年龄”属性命令,使用我的21值。

我想订购像这样的21,22,19,20所以Will,Ed,Tim,Jim

你知道如何以这种方式排序吗?

祝你好运!

1 个答案:

答案 0 :(得分: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
));