猫鼬:无法将嵌套对象保存到嵌套模型
Mongoose: Can't save nested object to nested model
我设置了以下架构:
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.');
});
...它似乎去掉了 'trade' 键,这就是保存到数据库中的所有内容:
{ channel: 'trade.5', _id: 54f9e3056e23df1ee3e60327 }
我是否遗漏了验证步骤、质量分配问题等?
编辑:如果我将 TradeSchema 设置为只有一个对象类型,它会很好地保存:
var TradeSchema = new mongoose.Schema({
channel: String,
trade: Object
});
不确定我会失去什么,因为我是 Mongo/Mongoose 的新手,但似乎可能有缺点。
创建 Trade
对象后,在将其推送到 market.trades
之前,使用 markModified
函数,将 trade
路径传递给它,如下所示:
trade.markModified('trade');
这将告诉 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.');
});
...它似乎去掉了 'trade' 键,这就是保存到数据库中的所有内容:
{ channel: 'trade.5', _id: 54f9e3056e23df1ee3e60327 }
我是否遗漏了验证步骤、质量分配问题等?
编辑:如果我将 TradeSchema 设置为只有一个对象类型,它会很好地保存:
var TradeSchema = new mongoose.Schema({
channel: String,
trade: Object
});
不确定我会失去什么,因为我是 Mongo/Mongoose 的新手,但似乎可能有缺点。
创建 Trade
对象后,在将其推送到 market.trades
之前,使用 markModified
函数,将 trade
路径传递给它,如下所示:
trade.markModified('trade');
这将告诉 Mongoose 此路径已修改并将其保存到数据库中。这是混合架构类型所必需的。