Java 如何在mongo中更新嵌入式文档?

Java 如何在mongo中更新嵌入式文档?,java,mongodb,Java,Mongodb,我在mongo db中有以下文档 { "_id" : ObjectId("50656f33a4e82d3f98291eff"), "description" : "gdfgdfgdfg", "menus" : [ { "name" : "gdfgdfgdfg", "description" : "dfgdgd",

我在mongo db中有以下文档

  { "_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);