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で可能ですか?最初のスキーマでは、ディープ レイヤーの更新中に 2 つの「$」を使用できないため、アトミックに更新することはできません。だから私は2番目のものと同じようにスキーマを変更しようと思ったのですが、どうすればそれを達成できますか?

最初に、メニュー内に項目を追加するために「$push」を使用しました...

どんな助けでも素晴らしいでしょう..

4

1 に答える 1

0

あなたの更新は「メニュー」オブジェクトを変更しているので、メニューが別のドキュメントの配列ではなくトップレベルのドキュメントになるようにスキーマを変更することをお勧めします。

メニューには、それが属する (別のコレクション内の) トップ レベル オブジェクトを参照するフィールドを含めるか、トップ レベル オブジェクトのフィールドを各メニュー ドキュメントに非正規化することができます。

アプリケーションの完全な要件を知らなければ、スキーマがいつ「十分」であるかを知ることは困難です。

于 2012-10-05T13:16:15.463 に答える