2013-09-01 6 views
5

के साथ उप-दस्तावेज़ निकालें, मैं एक मोंगोज़ दस्तावेज़ में संग्रहीत संग्रह से किसी आइटम को निकालने का प्रयास कर रहा हूं। मेरे दस्तावेज़ इस तरह दिखता है:मोंगो से mongoose

var inventory = res.locals.content; 
inventory.items.remove({sku: req.params.itemSku}, function (err, item) { 
    if (err) { 
    console.log('error occurred', err); 
    res.send('error'); 
    } 
    else { 
    res.send('Item found and deleted'); 
    return; 
    } 
}); 

जब मैं यह कर, मैं त्रुटि मिलती है "लेखन त्रुटि:

{ 
    "__v": 3, 
    "_id": "5221040475f174d59a000005", 
    "items": [ 
    { 
     "sku": 1321654654613213, 
     "name": "goldfish", 
     "quantity": 12, 
     "_id": "52224ed5bd9d340000000003" 
    }, 
    { 
     "sku": 12, 
     "name": "goldfish", 
     "quantity": 13, 
     "_id": "52225dcbf2f1e40000000003" 
    }, 
    { 
     "sku": 1299, 
     "name": "goldfish", 
     "quantity": 13, 
     "_id": "522260b6f2f1e40000000004" 
    } 
    ] 
} 

मैं 12. मैं कर रहा हूँ के sku साथ सुनहरी दूर करने के लिए निम्नलिखित हैं: अपरिभाषित संपत्ति 'बराबर' नहीं पढ़ सकता है। मुझे समझ में नहीं आता क्यों।

+0

आपके द्वारा प्रदान किए गए कोड में 'बराबर' शब्द नहीं होता है। क्या आप शायद एक स्टैक ट्रेस प्रदान कर सकते हैं? –

उत्तर

10

आप inventory.items.pull(req.params.itemSku) चाहते हैं, एक inventory.save कॉल किया गया। .remove

+0

मैं किसी भी त्रुटि नहीं मिल रहा है जब मैं का उपयोग 'inventory.items.pull ({SKU: req.params.itemSku});' लेकिन यह है कि मिलान sku के साथ तत्व के बजाय पूरे सरणी लौटा रहा है। ऐसा क्यों है? – Brandon

+3

'पुल 'रिटर्न' '', शायद चेनबिलिटी के लिए ताकि आप 'inventory.items.pull (blah) .push (blah)' कर सकें। https://github.com/LearnBoost/mongoose/blob/c328227a21004c7c1a295d215bbe55801e29c9ea/lib/types/array.js#L470 –

26

सहायक दस्तावेज़ों अब एक remove कार्य हो शीर्ष स्तर के दस्तावेज़ों के लिए है। Spec से निम्नानुसार उपयोग करें:

var doc = parent.children.id(id).remove(); 
parent.save(function (err) { 
    if (err) return handleError(err); 
    console.log('the sub-doc was removed') 
}); 
+0

क्या यह एक परमाणु कॉल है? 'से आइटम खींचती: – FRD

+2

आप की नकल की है कि सीधे नेवला के फीके प्रदर्शन डॉक्स से – OllyBarca

+0

वास्तव में, वास्तविक बचाने के परमाणु है, मैं स्रोत को देखा और यह'() की तरह लग रहा है हटाने 'MongooseArray.pull' जो, v4 डॉक्स के अनुसार का उपयोग करता है' सरणी पर सरणी। '- यदि आप सिंक इंडेक्स सिंक से बाहर निकलने के बारे में चिंतित हैं। ऐसा कहा जा रहा है कि, आप एक ही काम करने के लिए 'MongooseArray.pull' का भी उपयोग कर सकते हैं, जैसे स्वीकृत उत्तर राज्य। – Joao

3

finaly!

MongoDB: 

"imgs" : {"other" : [ { 
     "crop" : "../uploads/584251f58148e3150fa5c1a7/photo_2016-11-09_21-38-55.jpg", 
     "origin" : "../uploads/584251f58148e3150fa5c1a7/o-photo_2016-11-09_21-38-55.jpg", 
     "_id" : ObjectId("58433bdcf75adf27cb1e8608") 
            } 
          ] 
        }, 
router.get('/obj/:id', function(req, res) { 
var id = req.params.id; 



Model.findOne({'imgs.other._id': id}, function (err, result) { 
     result.imgs.other.id(id).remove(); 
     result.save();    
    });