2016-12-02 4 views
0

における配列の配列を削除します:どのように私はこれは私の文書構造であるMongoDBの

{ 
"_id" : ObjectId("5841eba5d3693034c49da7d7"), 
"Key" : "01041655", 
"matchingKey" : "01041655", 
"brand" : "Brand", 
"name" : "Product Name", 
"availabilities" : [ 
    { 
     "data1" : [ 
      { 
       "number_a" : null, 
       "number_b" : "4.5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      }, 
      { 
       "number_a" : null, 
       "number_b" : "5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      }, 
      { 
       "number_a" : null, 
       "number_b" : "5.5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      } 
     ] 
    }, 
    { 
     "data2" : [ 
      { 
       "number_a" : null, 
       "number_b" : "4.5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      }, 
      { 
       "number_a" : null, 
       "number_b" : "5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      } 
     ] 
    } 
] 
} 

イムではない、それはそのようにそれを行うための最善の方法だと、そうがあれば私に知らせてください確認してくださいそれを行うより良い方法。私の質問は:どのように配列data1またはdata2を削除することができますです。そして、Javaでこれを行う最良の方法は何ですか。私の現在のJavaコードは次のようになります:

Document array = new Document("availabilities", dataKey); 
Document updateSet = new Document("$unset", array); 
prodCollection.updateMany(eq("matchingKey", matchingKey), updateSet); 

しかし、このコードは利用可能なすべての文書を削除します。

UPDATE1:今、私はそのようなMongoDBの特定の配列で削除することができます

{ 
"_id" : ObjectId("5841eba5d3693034c49da7d7"), 
"Key" : "01041655", 
"matchingKey" : "01041655", 
"brand" : "Brand", 
"name" : "Product Name", 
"availabilities" : { 
     "data1" : [ 
      { 
       "number_a" : null, 
       "number_b" : "4.5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      }, 
      { 
       "number_a" : null, 
       "number_b" : "5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      }, 
      { 
       "number_a" : null, 
       "number_b" : "5.5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      } 
     ],   
     "data2" : [ 
      { 
       "number_a" : null, 
       "number_b" : "4.5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      }, 
      { 
       "number_a" : null, 
       "number_b" : "5", 
       "number_c" : null, 
       "number_d" : null, 
       "amount" : 0, 
       "lastCheck" : "2016-12-02T22:46:13.393+01:00" 
      } 
     ] 
    } 
} 

私はそのような文書構造を変更し

db.products.update({"matchingKey":'01041655'},{$unset: {"availabilities.data1":1}}); 

は、私はJavaでいることをどのように行うことができます?私はそれを試した:

Document array = new Document("availabilities.data1", 1); 
Document updateSet = new Document("$unset", array); 
prodCollection.updateOne(eq("matchingKey", matchingKey), updateSet); 

しかし、それでもすべての配列を削除します。

+0

可用性配列内の値を削除する基準は何ですか? – Veeram

+0

名前data1およびdata2。私は名前としてそれらを設定する必要がありますか? – jimb0p

答えて

0

私は$ set演算子について誤解しました。古いデータを新しいデータに置き換えます。そのため、私は配列を削除する必要はありません。 Javaのように$ setを使用するだけでした。

Document availDoc = new Document("availabilities."+key, availabilities); 
Document updateSet = new Document("$set", availDoc); 
prodCollection.updateOne(eq("matchingKey", matchingKey), updateSet); 
関連する問題