Java 如何在mongo中更新嵌入式文档?
我在mongo db中有以下文档Java 如何在mongo中更新嵌入式文档?,java,mongodb,Java,Mongodb,我在mongo db中有以下文档 { "_id" : ObjectId("50656f33a4e82d3f98291eff"), "description" : "gdfgdfgdfg", "menus" : [ { "name" : "gdfgdfgdfg", "description" : "dfgdgd",
{ "_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"
}
我想做菜单的自动更新
{
名称:gdfgdfgdfg,
描述:dfgdgd,
文本:dfgdfg,
重点:二,,
onSelect:yyy,
_id:Objected50656F3CA4E82D3F98291F00
}
我已尝试使用以下代码:
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的子文档: 您遇到的第一个问题是,您的代码只是将菜单字段设置为此对象。你需要的是岗位接线员。因此,您需要使用点表示法查找警告我的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);
希望这能奏效
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);