MongoDB update Array elements

來源:互聯網
上載者:User

標籤:void   ges   int   double   關係型資料庫   mysq   ring   app   public   

 本文記錄如何更新MongoDB Collection 中的Array 中的元素。假設Collection中一條記錄格式如下:

現要刪除scores 數組中,"type" 為 "homework",較小的那個score。在中,較小的score為54.759...

 

根據MongoDB上的update用法如下:

db.collection.update(query, update, options)

其中,query表示:更新的條件,update表示:待更新的內容,options表示:更新選項(比如,條件不匹配時,進行插入)

在這裡,我們的更新條件為 "_id" 是否匹配;使用 $pull 來刪除scores 數組中,"type" 為 "homework",較小的那個score。關於 $pull 的解釋如下:

The $pull operator removes from an existing array all instances of a value or values that match a specified condition.

 

比如下面一條語句:更新 "_id" 為1 且將 votes數組中 大於等於6的所有vote 都刪除。

#{ _id: 1, votes: [ 3, 5, 6, 7, 7, 8 ] }
db.profiles.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } 
#{ _id: 1, votes: [  3,  5 ] }

因此,我們的更新實現如下:

Document updateQuery = new Document("_id", document.get("_id"));//更新條件//待更新的內容Bson update = new Document("scores", new Document("type", "homework").append("score", homework_score_low));collection.updateOne(updateQuery, new Document("$pull", update));

整個完整代碼實現如下:

import com.mongodb.MongoClient;import com.mongodb.MongoClientURI;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import com.mongodb.client.MongoDatabase;import org.bson.Document;import org.bson.conversions.Bson;import java.util.List;/** * Created by Administrator on 2017/11/2. */public class HomeWorkScore {    public static void main(String[] args) {        MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost"));        MongoDatabase database = mongoClient.getDatabase("school");        MongoCollection<Document> collection = database.getCollection("students");        MongoCursor<Document> cursor = collection.find().iterator();        while (cursor.hasNext()) {            Document document = cursor.next();            Document updateQuery = new Document("_id", document.get("_id"));//更新條件            List<Document> scores = (List<Document>) document.get("scores");            double homework_score_low, home_work_score_high;            home_work_score_high = scores.get(2).getDouble("score");            homework_score_low = scores.get(3).getDouble("score");            if (home_work_score_high < homework_score_low) {                homework_score_low = home_work_score_high;            }            //待更新的內容            Bson update = new Document("scores", new Document("type", "homework").append("score", homework_score_low));            collection.updateOne(updateQuery, new Document("$pull", update));            System.out.println(document);        }        cursor.close();    }}
View Code

 更新完成後,執行:db.students.find().pretty() 。  "type"為 “homework” 的 score 只有一個了,如:

參考連結:

update 方法官方文檔

$pull 操作符官方文檔

 

下面再來介紹一下,如何為Collection中的空Array,添加元素。比如,一條初始的記錄如下:comments是個Array,現在要為Array添加Document

 

這裡需要用到 update 操作中的 $push 操作符:The $push operator appends a specified value to an array. update()的第一個參數是更新條件,第二個參數是更新內容。一個典型的 $push 樣本如下:

db.students.update(   { _id: 1 },   { $push: { scores: 89 } })

將 _id 為1 的記錄中的 scores 數組,再添加一個元素89。

 

Document comment = new Document("author", name).append("body", body).append("email", email);postsCollection.updateOne(query, new Document("$push", new Document("comments", comment)));

更新之後的記錄為:

關於$push,可參考:$push

 

總結:這篇文章是MongoDB University M101 for Java Developers中的第三章 Homework。MongoDB 區別於其他關係型資料庫的一個重要特徵是:PreJoin。當需要聯合多個欄位時,Mysql需要Join,而MongoDB則是在預先設計資料存放區時 就以 PreJoin的形式 Embedded 所有相關的欄位,從而在查詢擷取資料的時候不需要Join操作了。

當需要對 MongoDB Collection 中的記錄進行操作時,多Google,不需要去記 更新、刪除等操作。比如Google:mongodb add element to array ,就能找到如何往一個Array中添加Element

 

原文:http://www.cnblogs.com/hapjin/p/7776595.html

MongoDB update Array elements

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.