簡體   English   中英

Java中mongo數組中的訪問元素

[英]Access element in mongo array in java

說我在數據庫中有以下mongo對象:

{
    "_id" : ObjectId("4f904ebb5bebd4375b759c90"),
    "findme" : "someValue",
    "array" : [
        {
            "id" : "1234"
            "Y" : "0"
        },
        {
            "id" : "3456"
            "Y" : "0"
        },
        {
            "id" : "5678"
            "Z" : "0"
        }
    ]
}

我知道我可以在Java中使用以下點符號訪問器來更改數組內容...

BasicDBObject change = new BasicDBObject("findme", "someValue");   
BasicDBObject setDoc = new BasicDBObject();                 
setDoc.append("array.0.Y", "0");                                        
setDoc.append("array.1.Y", "0");                                      
setDoc.append("array.2.Z", "0");                                          
BasicDBObject account = new BasicDBObject("$set", setDoc);
coll.update(change, account);

但是,如果我只知道id為“ 3456”而不是它位於“ array”的索引1處,該如何更改“ 3456”的“ Y”值? 我真的很想在創建這些查詢對象和使用update方法的過程中完全完成此操作。換句話說,我寧願不拉出整個對象並遍歷“數組”來確定其位置。

謝謝!

編輯:多個數組元素可以具有字段“ Y”,如編輯的代碼所示。 我只想編輯特定元素的“ Y”字段。

要使用Java驅動程序執行此操作,可以執行以下操作:

DBObject queryForElem = new BasicDBObject("array", new BasicDBObject("$elemMatch", new BasicDBObject("id", "3456")));
DBObject updateMatchingElem = new BasicDBObject("$set", new BasicDBObject("array.$.Y", "1"));
coll.update(queryForElem, updateMatchingElem);

鑒於這有點笨拙,您可以改用QueryBuilder,這使您更具可讀性:

DBObject queryForElem = QueryBuilder.start("array").elemMatch(new BasicDBObject("id", "3456")).get();
DBObject updateMatchingElem = new BasicDBObject("$set", new BasicDBObject("array.$.Y", "1"));
coll.update(queryForElem, updateMatchingElem);
db.collection.update({array : {$elemMatch : {id : "3456"}}}, {$set : { 'array.$.Y' : '1' }})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM