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
函数,将trade
path传递给它,如下所示:
trade.markModified('trade');
这将告诉mongoose,这个path被修改并保存到数据库。 这是混合模式types所必需的。