2015-12-16 6 views
5

की एक सरणी से एक ObjectId निकालें मैं इस तरह एक objectId है: ["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"] अपने मॉडल में उस जानकारी को बचाने के लिए मैं का उपयोग करें:objectId

items: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Items' 
}] 

मुझे क्या करना कोशिश कर रहा हूँ एक तत्व खींचने के लिए है उस सरणी के बराबर है जो ऑब्जेक्ट के बराबर है, जिसे मैं हटाए गए अनुरोध में फ्रंट एंड से भेजता हूं।

कोड मैं उपयोग कर रहा हूँ:

_.remove(unit.items, request.params.itemId); 

मैं lodash लाइब्रेरी का उपयोग कर रहा हूँ।

मुझे लगता है कि समस्या यह है कि सरणी में ऑब्जेक्टआईड तत्व हैं और मैं अनुरोध की एक स्ट्रिंग के साथ तुलना करने की कोशिश कर रहा हूं .params.itemId।

+0

आप एक सरणी से एक सरणी दूर करने के लिए कोशिश कर रहे हैं, या आप दस्तावेजों की एक सरणी की क्या ज़रूरत है, और आप अपने req.params.itemId मिलान एक हटाना चाहते हैं? – steezeburger

उत्तर

2

मेरे पास "इवेंट" ऑब्जेक्ट के साथ एक बहुत ही समान सेटअप है जिसमें ऑब्जेक्ट आईडी के सरणी के रूप में सहेजे गए "असाइनमेंट" ऑब्जेक्ट्स की एक सरणी है। मैं बस

obj.arrayField.remove(idToRemove); 

का उपयोग करने में सक्षम था यहाँ मेरी हटाने मार्ग हैंडलर के अंदर प्रासंगिक कोड है:

var id = req.assignment._id; 
req.event.assignments.remove(id); 
req.event.save(function(err, event) { 
    //etc 
} 

आप के लिए यह काम करता है?

unit.items.remove(request.params.itemId); 
+0

धन्यवाद @MosheKarmel, बहुत अच्छा काम करता है, अब अगर मैं एक फर्क करना चाहता हूं तो कहें कि मेरे पास एक सरणी पुरानी है Items = ["56153e4c2040efa61b4e267f", "56033932efefe0d8657bbd9e"] और एक और सरणी newItems = ["56033932efefe0d8657bbd9e"], मैं उपयोग करने की कोशिश कर रहा हूं इस तरह लॉनाश फंक्शन फ़ंक्शन, _.difference (oldItems, newItems) लेकिन परिणाम [56153e4c2040efa61b4e267f "," 56033932efefe0d8657bbd9e "] है। मुझे क्या याद आ रहा है – Diego

+0

मुझे यकीन नहीं है, मुझे वास्तव में पता नहीं है :(क्या आप मेरे उत्तर को सही के रूप में चिह्नित कर सकते हैं अगर मैंने प्रश्न का उत्तर दिया? आप इसे एक नए प्रश्न के रूप में पूछने का प्रयास कर सकते हैं ... –

+0

ठीक है धन्यवाद @ moshe – Diego

1

आपको वास्तविक वस्तु प्राप्त करने के लिए स्ट्रिंग को mongoose.Types.ObjectId('') में पारित करने की आवश्यकता है जिसके साथ आप तुलना कर सकते हैं।

तो _.remove(unit.items, mongoose.Types.ObjectId(req.params.itemId));

संबंधित मुद्दे