2016-06-16 6 views
7
का उपयोग कर

मैं Node.js का उपयोग कर MongoDB में संग्रह करने के लिए वस्तु को जोड़ने का तरीका पता है, उदाहरण के लिए:MongoDB में एक और संग्रह के अंदर संग्रह करने के लिए वस्तु को जोड़ने के लिए कैसे Node.js

router.post('/addProduct', function (req, res) { 
    Partner.findByIdAndUpdate({ _id: req.body.partnerId }, { $push: { "products": { name: req.body.dataProduct.name } } }, { safe: true }, function (err, response) { 
     if (err) throw err; 
     res.json(response); 
    }); 
}); 

लेकिन उत्पाद में क्या हुआ अगर हो जाएगा एक और टेबल? मैं बस वहां वस्तु कैसे जोड़ सकता हूं? प्रत्येक partner और product में

var partnerSchema = new mongoose.Schema({ 
    name: String, 
    products: [ 
     { 
      name: String, 
      campaignList: [ 
       { 
        name: String, 
        type: String, 
        startDate: Date, 
        endDate: Date, 
        paymentMethod: String, 
        partnerPayout: Number, 
        ourPayout: Number 
       } 
      ] 
     }] 
}); 

आईडी डिफ़ॉल्ट हैं ._id जैसे:

चलो कहते हैं कि यह मेरा स्कीमा में है। partner._id और product._id। यही कारण है कि ऊपर स्कीमा में नहीं हैं। हालांकि मैं एक req.parameter के रूप में बैकएंड में फ़्रंटएंड से उन्हें भेजने - सामान्य रूप से बात लेकिन मुझे यकीन है कि :)

उत्तर

-1

के लिए यह कहना चाहता था कोशिश यह:

router.post('/addProduct', function (req, res) { 
     Partner.findOneAndUpdate({ _id: req.body.partnerId }, { $push: { "products": { name: req.body.dataProduct.name, $push: {"campaignList": {name: req.body.name}} } } }, { safe: true }, function (err, response) { 
      if (err) throw err; 
      res.json(response); 
     }); 
    }); 

मैं आशा है कि यह आप

+0

यह कोड नए 'उत्पाद' को जोड़ देगा बल्कि' अभियान सूची 'को पहले से मौजूद – DiPix

0

पहले मैच में मदद करता है आवश्यक उत्पादों सरणी स्थिति।

Partner.update({_id: req.body.partnerId), 'products.name': req.body.dataProduct.name }, { $push: { 'products.$.campaignList': { name: 'new campaign' }}}) 

संदर्भ https://docs.mongodb.com/manual/reference/operator/update/positional/

+0

में जोड़ देगा, यह काम नहीं करता है। मुझे लगता है कि यह मोंगोस – DiPix

+0

के लिए अच्छा समाधान नहीं है, मैंने रोबोमोंगो के माध्यम से सीधे मोंगोस के बाहर इसका परीक्षण किया और यह अपेक्षा के अनुसार अपडेट किया गया। शायद इस काम को रोकने से कुछ और विवरण है? शायद req.body.partnerId या req.body.dataProduct.name संदर्भों के साथ कोई समस्या है? – Paul

1

:

Partner.find({_id: req.body.partnerId), 'products.name': req.body.dataProduct.name }, { 'products.$': 1}) 

मिलान किया उत्पाद तत्व में सरणी में नई वस्तु पुश करने के लिए स्थितीय $ ऑपरेटर उपयोग करें: आप की तरह एक सरल खोज का परीक्षण करके यह पुष्टि कर सकते हैं आपकी सबसे अच्छी शर्त अभियान के लिए स्कीमा & मॉडल को परिभाषित करने के लिए शर्त होगी, और इसे _id

का उपयोग करके संदर्भ में भागीदार में जोड़ें।
var partnerSchema = new mongoose.Schema({ 
    name: String, 
    products: [ 
     { 
      name: String, 
      campaignList: [ 
       { type : mongoose.Schema.Types.ObjectId, ref : 'campaignModel' } 
      ] 
     }] 
}); 
var campaignSchema = new mongoose.Schema({ 
    name: String, 
    type: String, 
    startDate: Date, 
    endDate: Date, 
    paymentMethod: String, 
    partnerPayout: Number, 
    ourPayout: Number 
}); 
var campaignModel = mongoose.model('campaignModel', campaignSchema); 
var partnerModel = mongoose.model('partnerSchema', partnerSchema); 

एक अच्छा अभ्यास यह है कि आप घोंसले अर्ध-जटिल डेटा, या दो या तीन से अधिक कुंजी वाले ऑब्जेक्ट्स की कोशिश कर रहे हैं, और उन्हें अपने संग्रह में निकालें। न केवल उन दस्तावेजों की खोज करना आसान बनाता है, बल्कि यह अन्य वस्तुओं के संयोजन के साथ उनका उपयोग करना आसान बनाता है।

अपनी क्वेरी के दौरान .populate() पर कॉल करना सुनिश्चित करें ताकि मोंगोडीबी अन्य संग्रहों से दस्तावेज़ों को घोंसला जान सके, अन्यथा, आपके पास ObjectId की एक सरणी होगी।

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