2015-03-06 16 views
8

को नेस्टेड वस्तु सहेज नहीं सकता मैं निम्न स्कीमा की स्थापना की है:नेवला: नेस्टेड मॉडल

var TradeSchema = new mongoose.Schema({ 
     channel: String, 
     trade: { 
      tradeid: Number, 
      timestamp: Date, 
      datetime: Date, 
      marketid: Number, 
      marketname: String, 
      quantity: Number, 
      price: Number, 
      total: Number, 
      type: String 
     } 
    }); 

var MarketSchema = new mongoose.Schema({ 
     name: { type: String, index: true }, 
     trades: [TradeSchema] 
    }); 

व्यापार स्कीमा वास्तव में "व्यापार" संपत्ति की तरह नेस्ट की आवश्यकता नहीं है, लेकिन मैं मैं इसे एएपीआई से प्राप्त कर रहा हूं और अभी के लिए मैं इसे ठीक से रखना चाहता हूं जैसा कि मुझे मिला।

समस्या है, जब मैं कच्चे जे एस वस्तु ले:

{ 
    channel: 'trade.5', 
    trade: { 
     tradeid: '86554823', 
     timestamp: 1425569593, 
     datetime: '2015-03-05 10:33:13 EDT', 
     marketid: '5', 
     marketname: 'FTC/BTC', 
     quantity: '957.65001732', 
     price: '0.00001210', 
     total: '0.01158757', 
     type: 'Sell' 
    } 
} 

... और मैं इसे बचाने के लिए ...

market.trades.push(trade); 
market.save(function(err){ 
    if (err) console.log('Error saving trade to market.'); 
}); 

... इसे बाहर पट्टी करने लगता है '

{ channel: 'trade.5', _id: 54f9e3056e23df1ee3e60327 } 

मैं एक मान्यता कदम है, बड़े पैमाने पर काम समस्या गायब कर रहा हूँ, आदि: व्यापार 'कुंजी, और यह डाटाबेस को सहेजा जाता है सब है?

संपादित करें: यदि मैं TradeSchema सेट सिर्फ एक ऑब्जेक्ट प्रकार है, यह ठीक सहेजता है:

var TradeSchema = new mongoose.Schema({ 
     channel: String, 
     trade: Object 
    }); 

सुनिश्चित नहीं हैं कि मैं क्या खो देगा के बाद से मैं मोंगो/नेवला के लिए नया हूँ, लेकिन ऐसा लगता है वहाँ की तरह शायद एक नकारात्मक पक्ष।

उत्तर

12

अपने Trade वस्तु बनाने और market.trades करने के लिए इसे आगे बढ़ाने से पहले, markModified फ़ंक्शन का उपयोग करें, यह करने के लिए trade पथ गुजर, इस तरह के बाद:

trade.markModified('trade'); 

यह नेवला बता देंगे कि इस पथ संशोधित किया गया था और उसे सहेजें डीबी के लिए। मिश्रित स्कीमा प्रकारों के लिए यह आवश्यक है।

+0

उसने ऐसा किया! धन्यवाद। – crypticsymbols

+0

यदि आप पहले से ही कुछ बदले और नेस्टेड ऑब्जेक्ट के साथ मॉडल रखते हैं, तो आप इसका उपयोग भी कर सकते हैं: 'market.trades.push (व्यापार); market.markModified ('ट्रेडों'); market.save(); 'यह मेरे लिए एक आकर्षण की तरह काम किया है! Ty। – SkyDancer

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