1.原生Java操作Mongo对结果进行排序

1、首先连接自己的mongo数据库,拿到client操作对象(此处我是读取的配置文件中的数据库IP,端口默认27017)

Properties properties = new Properties();
InputStream stream =Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties");
properties.load(stream);
String property = properties.getProperty("mongo.host");
MongoCollection<Document> client = new MongoClient(property, 27017).getDatabase("数据库名").getCollection("集合名");

2、通过bson对象设置过滤条件,可设多个

如果想要让查询出来的结果按照文档中的某个字段进行排序在find方法之后调用sort方法再指定过滤条件,实例中的条件表示按照batch字段进行过滤,1代表升序,-1代表降序

Bson bson = Filters.and(Filters.eq("enterpriseId", cId));

FindIterable<Document> documents = client.find(bson).sort(Filters.eq("batch",1));

2.使用MongoTemplate对结果进行排序

1.构建查询条件

Query query = new Query();
Criteria criteria = Criteria.where("key").is("value");
query.addCriteria(criteria);

2.如果要对结果进行排序,在上面的基础上继续添加排序条件

【注】Sort.Order.asc是升序  .desc降序

//先注入MongoTemplate
query.with(Sort.by(Sort.Order.asc("batch"))); //查询结果按照batch字段升序
List<Client> clients = mongoTemplate.find(query, Client.class, "client_info");

3.指定返回结果要包含的字段

public List<Document> queryByCondition(String cId,String... condition) throws IOException {
        Properties properties = new Properties();
        InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties");
        properties.load(stream);

        MongoCollection<Document> client = new MongoClient(properties.getProperty("mongo.host"), 27017).getDatabase("services").getCollection("client_info");

        Bson bson1 = Filters.and(Filters.eq("enterpriseId", cId));

        List<Bson> bsons = new ArrayList<>();
        for (String value : condition) {
            bsons.add(
                    Filters.eq(value, 1)
            );
        }
        Bson bson2 = Filters.and(bsons);

        List<Document> list = new ArrayList<>();
        FindIterable<Document> documents = client.find(bson1).projection(bson2);
        for (Document document : documents) {
            list.add(document);
        }
        return list;
    }

示例中我通过可变长参数传递来的字段数组作为结果要返回的字段,先遍历数组取出每一个值放进list<Bson>集合中,value就是要指定返回的字段,第二个参数1表示要返回该字段,0表示不返回该字段【_id字段默认返回】,然后调用projection方法进行过滤

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐