2016-03-26 15 views
0

Aşağıdaki gibi bir alt diziden verileri kaldırmaya çalışıyorum ancak zorluklarım var.İç içe geçmiş diziden, alt kimliğe göre "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 
      } 
     ] 
     } 

Ben çıkış olmak istiyorum:

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

Bu denedim:

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

ve

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

Ama her ikisi de işe yaramaz, aldığım en iyisi:

WriteResult ({ "nMatched": "nUpserted" 1: 0, "nModified": 0})

gören var nereye ben yanlış gidiyorum?

+0

Test ikinci kodları 'db.coll.update ({_ id: '0'}, {$ çekme: { 'mainArray.0.informations': { 'sipariş numarası': 6}}})' ve sonucu 'WriteResult ({" nMatched ": 1," nUpserted ": 0," nModified ": 1})' mogno v3.2.3 altında – zangw

+0

WriteResult ({"nMatched": 1, "nUpserted") almaya devam ediyorum: 0, "nodified": 0}) anlamıyorum – jayD

cevap

2

Konum operatörü '$' kullanmanız gerekir. Dizi alan sorgu belgenin bir parçası olarak görünmelidir anlamaya: $ açıkça Not

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

dizideki öğenin konumunu belirtmeden güncellemek için bir dizideki bir öğe olarak tanımlayan bir positional operator olduğunu mainArray öğesinde eşleşen konum.

+0

Hey, Yardım ettiğin için teşekkürler. Haklısın, dizideki diziyle ilgili bir sorun çünkü benim örneğim verilere iyi bakmadı. Örneğimi güncelledim ve doğru dizini sağladığında işe yaramıyorsunuz, ancak sorun şu ki, dizini bilmem ama sadece OrderId ve fiyatı çok dinamik değil. $ I ile alıyorum: "writeError": { \t \t "code": 16837, \t \t "errmsg": "Konum operatörü sorgudan gerekli olan eşleşmeyi bulamadı. Beklenmeyen güncelleme: mainArray. $. Informations "' – jayD

İlgili konular