2012-09-04 56 views
0

一個很簡單的問題,我應該如何去給下面這樣做:修改窩案的MongoDB中值的Java

> db.blog.posts.findOne() 
{ 
"_id" : ObjectId("4b253b067525f35f94b60a31"), 
"title" : "A Blog Post", 
"content" : "...", 
"author" : { 
    "name" : "joe", 
    "email" : "[email protected]" 
    } 
} 

我看到在JavaScript中的答案是這樣的:

> db.blog.posts.update({"author.name" : "joe"}, {"$set" : {"author.name" : "joe schmoe"}}) 

但如何我會在Java中這樣做嗎?

如果我有一個非常深刻的價值有待改變,我應該用這種方式?如:「person.abc.xyz.name.address」?

回答

1

使用點符號來訪問嵌套文檔將在Java驅動程序中很好地工作。看看這個StackOverflow的答案:

MongoDB nested documents searching

對於Java驅動程序,其基本思想是,以取代BasicDBObject實例的JavaScript對象。

這裏有一個更新的另一個很好的參考:

MongoDb's $set equivalent in its java Driver

+0

喜感謝您的回覆。請再提一個問題,這兩個是一樣的嗎? 1)db.blog.posts.find({「author.name」:「joe」}) 2)db.blog.posts.find({「author:{」name「:」joe「}} – GMsoF

+0

當我我使用它進行搜索,這兩個文件是否會返回相同的文檔? – GMsoF

+1

否。第一個匹配任何包含嵌入式「作者」文檔並且字段「名稱」等於「joe」的文檔。嵌入的「作者」文檔正是{「name」:「joe」}(沒有其他字段)。想想第二個匹配「author」字段 - 行爲與「author」不是一個文件。 – shelman