【API知識】MongoTemplate非映射方式操作Document


前言

  我是MongoDB小白,剛開始學。不過,我猜大多數使用MongoDB的,都是采用映射方式處理的,即需要有定義好的用於映射的實體類。但是這樣的話,如果表的結構在未來可能頻繁變動,增刪字段,甚至添加新的數據表。那么這種方式就不太好用了。這時候就需要用非映射的方式處理。

映射方式操作Document

  這種方式最常見,一般就是預定義一些映射的實體類,然后打上@Ducument注解。在使用MongoTemplate的查詢文檔的時候,一般就是根據查詢語句創建一個Query對象,然后用MongoTemplate.find(query, entityClass)這樣的方式,就可以返回對應的實體對象集合。這樣的例子非常多,我這里就不貼代碼了。

非映射方式操作Document

  非映射方式操作Document,就是不需要預定義實體類,也就是沒有實體類。我們只需要JSON數據就可以了。而剛好Document對象有提供toJson方法,可以返回一個JSON字符串。非映射方式不能直接用MongoTemplate直接find,而是要先獲取集合對象,然后,在集合內部,相當於在表內部查詢。

 例子如下:

public String findTest() {
        //1.獲取集合對象
        MongoCollection<Document> collection = mongoTemplate.getCollection("test");
        //2.創建用於查詢的BSON對象
        Bson bson = eq("field", "value");
        //3.利用bson條件查詢結果
        FindIterable<Document> documents = collection.find(bson);
        //4.將結果拼接成json數組
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for(Document document : documents) {
            sb.append(document.toJson() + ",\n");
        }
        sb.append("]");
        return sb.toString();
    }

可用的工具包 

  其中,eq()方法是Mongo Spring Boot整合包提供的。它表示條件:當文檔的某個字段等於某個值的時候,文檔被選中。這個方法是Filters的靜態方法,如果要直接調用,可以通過靜態引入:

import static com.mongodb.client.model.Filters.*;

這個類中,有很多用於過濾的方法。如eq(),ne(),gt(),lt(),in()等等更查詢條件有關的。

如果你需要用於更新的方法,那么你可導入Updaters的靜態方法,如set(),unSet(),rename()等等。

例子:

//注意key必須是字符串,而value可以是任意類型
Bson udpateBson = set("key", "value");

以上就是把文檔的某個字段的值改為設定的值。

注:這兩個類都來自mongodb-driver-core.jar包的com.mongodb.client.model目錄下,想看更多功能可自行查看。

如何結合查詢和更新的bson來執行一個更新操作呢?

  前面的更新bson,只說明了怎么更新,而沒有說明要更新誰。而一個更新操作,必然包含查詢,和修改兩個操作。那么如何整合兩個bson來使用呢?案例如下:

//查詢條件
Bson searchBson = eq("job", "programmer");
//修改操作
Bson uddateBson = set("label", "666");
//修改所有符合條件的文檔
collection.updateMany(searchBson, uddateBson);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM