[英]How to update embedded mongo document using spring mongo data api
[英]How to update embedded document in mongo?
我在mongo數據庫中有以下文檔。
{ "_id" : ObjectId("50656f33a4e82d3f98291eff"),
"description" : "gdfgdfgdfg",
"menus" : [
{
"name" : "gdfgdfgdfg",
"description" : "dfgdgd",
"text" : "dfgdfg",
"key" : "2",
"onSelect" : "yyy",
"_id" : ObjectId("50656f3ca4e82d3f98291f00")
},
{
"name" : "rtytry",
"description" : "gffhf",
"text" : "dfgdfg",
"key" : "2",
"onSelect" : "yyy",
"_id" : ObjectId("50656f3ca4e82d3f98281f00")
}],
"select":"ffdfgd"
}
我想自動更新菜單{
“ name”:“ gdfgdfgdfg”,
“ description”:“ dfgdgd”,
“ text”:“ dfgdfg”,
“ key”:“ 2”,
“ onSelect”:“ yyy”,
“ _id”:ObjectId(“ 50656f3ca4e82d3f98291f00”)}
我嘗試使用以下代碼:
BasicDBObject query = new BasicDBObject("_id", new ObjectId("50656f33a4e82d3f98291eff"));
BasicDBObject update = new BasicDBObject("_id", ObjectId("50656f3ca4e82d3f98291f00"));
BasicDBObject updateCommand = new BasicDBObject("$set", new BasicDBObject("menus", update));
collection.update(query, updateCommand);
我得到的結果是
{ "_id" : ObjectId("50656f33a4e82d3f98291eff"),
"description" : "gdfgdfgdfg",
"menus" :
{
"name" : "gdfgdfgdfg",
"description" : "dfgdgd",
"text" : "dfgdfg",
"key" : "2",
"onSelect" : "yyy",
"_id" : ObjectId("50656f3ca4e82d3f98291f00")
},
"select":"ffdfgd"
}
但我想在同一嵌入式文檔中進行更新。
任何人都可以引導我....提前感謝
好的在讀了幾次(英語...)之后,我想我現在明白了。
您要使用_id 50656f3ca4e82d3f98291f00
子文檔:
{
"name" : "gdfgdfgdfg",
"description" : "dfgdgd",
"text" : "dfgdfg",
"key" : "2",
"onSelect" : "yyy",
"_id" : ObjectId("50656f3ca4e82d3f98291f00")
}
您遇到的第一個問題是您的代碼僅將menus
字段設置為此對象。 您需要的是位置運算符。 因此,您需要進行點符號查找(警告我的Java有點生銹):
query.append("menus._id", new ObjectId("50656f3ca4e82d3f98291f00"));
然后使用該位置運算符更新位置:
BasicDBObject update_document = new BasicDBObject("menus.$.name", my_new_subdocument.name);
update_document.append("menus.$.description", my_new_subdocument.description);
// All the other fields
BasicDBObject updateCommand = new BasicDBObject("$set", update_document);
希望這可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.