2016-03-26 65 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 } } }); 

但兩者不工作,我得到的最好的:

寫結果({ 「nMatched」:1, 「nUpserted」:0, 「n修改」:0})

任何人看到我要去哪裏錯了嗎?

+0

測試你的第二個代碼'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

您需要使用位置運算符'$'。 $positional operator其標識在數組中的元素沒有明確指定所述陣列中的元件的位置

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

注更新:數組字段必須出現在查詢文檔的一部分找出在mainArray中匹配位置。

+0

嘿,謝謝你的幫助。你是對的,這是數組中索引的一個問題,因爲我的例子沒有很好地表示我的數據。我已經更新了我的示例,並且您說得對,它在提供正確的索引時工作正常,但問題是我不應該知道索引,但只知道OrderId和價格,因此它不是真正動態的。 $越來越:'writeError「:{ \t \t」code「:16837, \t \t」errmsg「:」位置運算符沒有找到所需的查詢匹配。 Unexpanded update:mainArray。$。informations「' – jayD