2016-03-26 32 views
0

次のようにサブ配列からデータを削除しようとしていますが、問題があります。サブ配列 "nModified"でネストされた配列から削除:0

{ 
    "_id" : "0", 
    "mainArray" : [ 
     { 
     "price" : 12, 
     "informations" : [ 
      { 
      "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4", 
      "orderId" : 1 
      }, 
      { 
      "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4", 
      "orderId" : 2 
      } 
     ] 
     },{ 
     "price" : 45, 
     "informations" : [ 
      { 
      "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4", 
      "orderId" : 5 
      }, 
      { 
      "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4", 
      "orderId" : 6 
      } 
     ] 
     } 

私は、出力がなりたい:私はこの試みた

{ 
    "_id" : "0", 
    "mainArray" : [ 
     { 
     "price" : 12, 
     "informations" : [ 
      { 
      "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4", 
      "orderId" : 1 
      }, 
      { 
      "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4", 
      "orderId" : 2 
      } 
     ] 
     },{ 
     "price" : 45, 
     "informations" : [ 
      { 
      "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4", 
      "orderId" : 5 
      } 
     ] 
     } 

db.collection.update({ "_id": "0" }, { $pull: { 'mainArray.informations': { "orderId": 6 } } }); 

db.collection.update({ "_id": "0" }, { $pull: { 'mainArray.0.informations': { "orderId": 6 } } }); 

をしかし、両方が動作しません、最高の私が得ている:

WriteResult({ "nMatched":1、 "nUpserted":0、 "nModified":0})私は間違ったつもりだどこ

誰もが見ますか?

+0

第2コード 'db.coll.update({_ id: '0'}、{$ pull:{'mainArray.0.informations':{'orderId':6}}})'をテストし、結果は 'WriteResult({" nMatched ":1、" nUpserted ":0、" nModified ":1})' mogno v3.2.3の下にあります。 – zangw

+0

WriteResult({"nMatched":1、 "nUpserted" 0、 "nModified":0})私はそれを取得しない – jayD

答えて

2

位置演算子 '$'を使用する必要があります。配列フィールドを把握するために、クエリ文書の一部として表示されなければならない:$明示的アレイ

db.collection.update({ "_id": "0" ,"mainArray.informations.orderId":6 }, 
        { $pull: { 'mainArray.$.informations': { "orderId": 6 } } }); 

注記要素の位置を指定せずに更新する配列の要素を識別するpositional operatorでありますmainArrayの位置が一致します。

+0

ねえ、助けてくれてありがとう。私の例が私のデータをうまく表現していなかったので、それは配列のインデックスの問題です。私は私の例を更新しました。正しいインデックスを提供するときにはうまくいきますが、インデックスは知っていないが、OrderIdと価格だけしか知りません。 "writeError":{ \t \t "code":16837、 \t \t "errmsg": "ロケーションオペレータはクエリから必要な一致を見つけられませんでした。未拡張の更新:mainArray。$。情報 "' – jayD

関連する問題