0

我有如下的 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中可能吗?在第一个模式中,原子更新是不可能的,因为我们不能在更新深层时使用两个“$”。所以我想改变模式与第二个相同,我该如何实现呢?

对于第一个,我使用“$push”在菜单中添加项目......

任何帮助都会很棒..

4

1 回答 1

0

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

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

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

于 2012-10-05T13:16:15.463 回答