2015-04-19 58 views
0

我有一個MongoDB的文檔結構類似這樣的MongoDB的Java的嵌套更新

{ 
    "_id": "002", 
    "list": [ 
    { 
     "year": "2015", 
     "entries": [{...}, {...}] 
    }, 
    { 
     "year": "2014", 
     "entries": [{...}, {...}] 
    } 
    ] 
} 

我想一個新的元素推到「項」。我知道它可以使用

collection.updateOne(
    Filters.eq("_id", "002"), 
    new Document("$push", new Document("list.0.entries", "{...}") 
); 

但是,這附加到「列表」的第一個元素的「條目」。我想追加到「年」2015年的「條目」。我怎樣才能做到這一點與MongoDB Java驅動程序API(3.0)?

+0

那麼是什麼問題? 2015年是第一個因素。 –

回答

0

我想你應該使用類似

Filters.and(Filters.eq("_id", "002"), Filters.eq("list.year", "2015")) 

PS作爲過濾器的javadoc表明,這是方便使用靜態導入它(使它更簡潔一些,跳過「過濾器」部分)

+0

推送條目仍然有問題。 collection.updateOne(and(eq(「_ id」,「002」),eq(「list.year」,「2015」)), new Document(「$ push」,new Document(「entries」,「 {...}「) ); 這將插入一個新的鍵」條目「與給定值一起」列表「,而不是」列表「與」年「內的2015年作爲2015 – FrankS

+0

我認爲(沒有時間去嘗試這個atm ,抱歉),您應該使用 'list。$。entries' 而不是「entries」。請參閱http://docs.mongodb.org/manual/reference/operator/update/positional/。我希望這可以幫助您。 – vambo

0

您可以使用

Bson filter = Filters.and(Filters.eq("_id", "002"), Filters.eq("list", Filters.eq($elemMatch, Filters.eq("year", "2015")) Document list = collection.find().filter(filter)

之後,您可以遍歷列表找到2015年,並得到這個條目通過java代碼插入新元素。將更新後的列表保存在本地變量中,並通過更新命令將其寫入您的mongoDB中。