是否可以在mongo文件中将对象列表添加到嵌入式数组文档中?

时间:2012-10-05 11:56:53

标签: java mongodb

我有mongo文件如下:

  {
  "_id" : ObjectId("506e9e54a4e8f51423679428"),
  "description" : "ffffffffffffffff", 
  "menus" : [  
            {   
              "_id" : ObjectId("506e9e5aa4e8f51423679429"),     
               "description" : "ffffffffffffffffffff",  
                  "items" : [
                           {    
                          "name" : "xcvxc",     
                          "description" : "vxvxcvxc",   
                          "text" : "vxcvxcvx",  
                          "menuKey" : "0",  
                           "onSelect" : "1",    
                          "_id" : ObjectId("506e9f07a4e8f5142367942f") 
                          } ,
                          {     
                          "name" : "abcd",  
                          "description" : "qqq",    
                          "text" : "qqq",   
                          "menuKey" : "0",  
                           "onSelect" : "3",    
                          "_id" : ObjectId("507e9f07a4e8f5142367942f") 
                          }
                         ] 
             }
         ]
  }

现在我想将其更改为:

       {
        "_id" : ObjectId("506e9e54a4e8f51423679428"),
        "description" : "ffffffffffffffff", 
        "menus" : [ 
            {   
              "_id" : ObjectId("506e9e5aa4e8f51423679429"),     
               "description" : "ffffffffffffffffffff",  
                  "items" : {
                           {    
                          "name" : "xcvxc",     
                          "description" : "vxvxcvxc",   
                          "text" : "vxcvxcvx",  
                          "menuKey" : "0",  
                           "onSelect" : "1",    
                          "_id" : ObjectId("506e9f07a4e8f5142367942f") 
                          } ,
                          {     
                          "name" : "abcd",  
                          "description" : "qqq",    
                          "text" : "qqq",   
                          "menuKey" : "0",  
                           "onSelect" : "3",    
                          "_id" : ObjectId("507e9f07a4e8f5142367942f") 
                          }
                       } 
             }

           ]

   }

这可能在mongo吗?在第一个模式中,原子上不可能更新becoz我们在更新深层时不能使用两个“$”。所以我想改变架构和第二架一样,我怎样才能实现呢?

首先我使用“$ push”在菜单中添加项目 ...

任何帮助都会很棒......

1 个答案:

答案 0 :(得分:0)

您的更新正在更改“菜单”对象,因此我建议您更改架构,以便菜单是顶级文档,而不是其他文档中的数组。

菜单可以有一个引用它所属的顶级对象(在另一个集合中)的字段,也可以将顶级对象的字段反规范化为每个菜单文档。

在不了解应用程序的完整要求的情况下,很难知道架构何时“足够好”。