我是MongoDB小白,剛開始學。不過,我猜大多數使用MongoDB的,都是採用映射方式處理的,即須要有定義好的用於映射的實體類。可是這樣的話,若是表的結構在將來可能頻繁變更,增刪字段,甚至添加新的數據表。那麼這種方式就不太好用了。這時候就須要用非映射的方式處理。mongodb
這種方式最多見,通常就是預約義一些映射的實體類,而後打上@Ducument註解。在使用MongoTemplate的查詢文檔的時候,通常就是根據查詢語句建立一個Query對象,而後用MongoTemplate.find(query, entityClass)這樣的方式,就能夠返回對應的實體對象集合。這樣的例子很是多,我這裏就不貼代碼了。json
非映射方式操做Document,就是不須要預約義實體類,也就是沒有實體類。咱們只須要JSON數據就能夠了。而恰好Document對象有提供toJson方法,能夠返回一個JSON字符串。非映射方式不能直接用MongoTemplate直接find,而是要先獲取集合對象,而後,在集合內部,至關於在表內部查詢。數組
例子以下:app
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的靜態方法,若是要直接調用,能夠經過靜態引入:ui
import static com.mongodb.client.model.Filters.*;
這個類中,有不少用於過濾的方法。如eq(),ne(),gt(),lt(),in()等等更查詢條件有關的。spa
若是你須要用於更新的方法,那麼你可導入Updaters的靜態方法,如set(),unSet(),rename()等等。code
例子:對象
//注意key必須是字符串,而value能夠是任意類型 Bson udpateBson = set("key", "value");
以上就是把文檔的某個字段的值改成設定的值。blog
注:這兩個類都來自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);