1. 程式人生 > >MongodbTemplate的增刪改操作

MongodbTemplate的增刪改操作

 

插入資料操作

將引數轉換成一個物件,直接呼叫insert方法即可: 
舉例:

@Document(collection="student")
public class Student {

    private String studentId;
    private String name;
    private int age;
    private String sex;
    public String getStudentId() {
        return studentId;
    }
    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

首先建立一個javabean,其中的@Document註解是指定該物件和哪個collection對應。

然後我們將要存入的資料封裝到這個物件中,並呼叫mongodbTemplate的insert方法。

public void insert(){
    Student student = new Student("1","zhangsan",18,"男");
    mongoTemplate.insert(student);
}

當然,在開發中複雜的資料結構是比較常見的,例如我們需要儲存巢狀文件的時候,如果直接使用javabean是比較麻煩的,這種比較複雜的資料結構,我們只需要拿到json字串,並將其轉換成json物件,即可直接插入到mongodb中。

public void insert(){
    String classStr = "{'classId':'1','Students':[{'studentId':'1','name':'zhangsan'}]}";
    JSONObject parseObject = JSON.parseObject(classStr);
    mongoTemplate.insert(parseObject,"class");
}

insert方法有一個缺陷,就是每呼叫一次,就會插入一條新的資料,但是有很多時候,我們需要如果資料存在,則修改,如果不存在,則插入,這個時候,更新操作是比較常用的。

更新資料操作

更新一條資料,在關係型資料庫中,我們需要where條件篩選出需要更新的資料,並且要給定更新的欄位及值,在mongodb中也是一樣,我們需要給定條件和值:

public void update(){
    Query query = new Query();
    query.addCriteria(Criteria.where("classId").is("1"));
    Update update = Update.update("teacher", "Mr.wang");
    mongoTemplate.upsert(query, update, "class");
}

在classId為1的資料中修改teacher欄位為Mr.wang,如果這條資料中沒有teacher欄位,則會新增該欄位。 
mongodbTemplate中還有另外一個更新方法:

mongoTemplate.updateFirest(query, update, "class");
mongoTemplate.updateMulti(query, update, "class");

這個兩個方法一個是更新滿足條件的第一條資料,一個是更新所有滿足條件的資料,它們和upsert的區別就是,如果query條件沒有篩選出對應的資料,那麼upsert會插入一條新的資料,而update則什麼都不會做。和關係型資料庫中的merge和update的一樣。

新增內嵌文件中的資料

Query query = Query.query(Criteria.where("classId").is("1"));
Student student = new Student("1", "lisi", 18, "man");
Update update = new Update();
//update.push("Students", student);
update.addToSet("Students", student);
mongoTemplate.upsert(query, update, "class");

addToSet如果資料已經存在,則不做任何操作,而push會插入一條一樣的資料。

修改內嵌文件中的資料

public void update(){
    Query query = Query.query(Criteria.where("classId").is("1")
                .and("Students.studentId").is("1"));
    Update update = Update.update("Students.$.name", "lisi");
    mongoTemplate.upsert(query, update, "class");
}

刪除內嵌文件中的資料

Query query = Query.query(Criteria.where("classId").is("1")
                .and("Students.studentId").is("3"));
Update update = new Update();
update.unset("Students.$");
mongoTemplate.updateFirst(query, update, "class");

這種方法有一個缺陷,會將符合條件的資料修改成null,如果要徹底刪除,則需要使用pull(pull刪除內嵌文件的時候,student物件的值一定要和被刪除的一模一樣)

Query query = Query.query(Criteria.where("classId").is("1"));
Update update = new Update();
Student student = new Student("2","lisi",18,"man");
update.pull("Students",student);
mongoTemplate.updateFirst(query, update, "class");

刪除操作

Query query = Query.query(Criteria.where("classId").is("1"));
mongoTemplate.remove(query,"class");

remove操作是直接將所有滿足條件的資料給刪除,如果只是要刪除內嵌文件中的資料,則需要使用上面更新操作。