【问题标题】:Is it possible to add list of objects into embedded array document in mongo document?是否可以将对象列表添加到 mongo 文档中的嵌入式数组文档中?
【发布时间】:2012-10-05 21:16:15
【问题描述】:

我的 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”在menus中添加items...

任何帮助都会很棒..

【问题讨论】:

  • 两者到底有什么区别?在第二个中是否有错字(字段名称必须是字符串)?你说的第一个模式中不可能的更新是什么?
  • 在第二种形式中,items 不是有效的 Json 对象。它必须是键值对。
  • @Thilo 实际上我需要进行原子更新,例如:我想将项目中的“name”:“abcd”更新为“name”:“cc”。
  • @GowtGM:那么你可能应该问这个问题。也许这有帮助:stackoverflow.com/questions/7425993/…
  • @Thilo 是的,但不可能这样做,我只能使用索引值进行更新,但我需要使用 id。所以我正在寻找其他模式..

标签: java mongodb


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2016-10-16
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多