2015-03-06 19 views
8

Ho il seguente schema impostato:Mongoose: Impossibile salvare oggetto nidificato al modello nidificato

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] 
    }); 

Lo schema commerciale in realtà non bisogno di avere la proprietà "mestiere" annidato in quel modo, ma io sto ricevendo da anAPI e per ora voglio mantenere quello esattamente come l'ho avuto.

Il problema è, quando prendo l'oggetto JS grezzo:

{ 
    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' 
    } 
} 

... li risparmio che ...

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

... sembra mettere a nudo il ' chiave del commercio', e questo è tutto ciò che viene salvato al db:

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

mi manca una fase di convalida, problema della massa-assegnazione, ecc?

EDIT: Se io impostare la TradeSchema di avere solo un tipo di oggetto, si salva bene:

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

Non so cosa avrei perso dal momento che sono nuovi per il Mongo/Mongoose, ma sembra che ci sia probabilmente un aspetto negativo.

risposta

12

Dopo aver creato l'oggetto Trade e prima spingendolo verso market.trades, utilizzare la funzione markModified, passando il percorso trade ad esso, in questo modo:

trade.markModified('trade'); 

Questo dirà Mongoose che questo percorso è stato modificato e salvarlo al DB. Questo è richiesto per i tipi di schema Misti.

+0

L'ha fatto! Grazie. – crypticsymbols

+0

Puoi anche usarlo in questo modo, se hai già un modello con qualche oggetto modificato e annidato: 'market.trades.push (trade); market.markModified ('mestieri'); market.save(); 'Ha funzionato per me come un fascino! Ty. – SkyDancer

Problemi correlati