Mongoose:无法将嵌套对象保存为嵌套模型

我有以下架构设置:

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

Trade模式实际上并不需要像这样嵌套“trade”属性,但是我正在从API中获取它,现在我想保持它完全符合我的要求。

问题是,当我把原始的JS对象:

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

我是否缺lessvalidation步骤,批量分配问题等?

编辑:如果我设置TradeSchema只是有一个对象types,它可以很好地保存:

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

不知道自从我刚接触Mongo / Mongoose后会失去什么,但似乎有可能是一个缺点。

创buildTrade对象之后,在将其推向market.trades之前,使用markModified函数,将tradepath传递给它,如下所示:

 trade.markModified('trade'); 

这将告诉mongoose,这个path被修改并保存到数据库。 这是混合模式types所必需的。