在将数据推送到模块后尝试保存模型时遇到问题: 这是Schemas:
var ClientSchema = new Schema({
email: {type: String, required: '{PATH} is required!', unique: 'This email already exists!'},
name: String,
nick: String,
domains: [{ type: Schema.Types.ObjectId, ref: 'Domain' }],
hosting: [{ type: Schema.Types.ObjectId, ref: 'Hosting'}]
});
var DomainSchema = new Schema({
name: {type: String, required: '{PATH} is required'},
startDate: {type: Date, required: '{PATH} is required'},
endDate: {type: Date, required: '{PATH} is required'},
realPrice: {type: Number, required: '{PATH} is required'},
billedPrice: {type: Number, required: '{PATH} is required'}
});
并且这是控制器的一部分:
...
Client.findOne({_id: req.params.client_id},function(err,client) {
var domain = new Domain({
name: req.body.name,
startDate: req.body.startDate,
endDate: req.body.endDate,
realPrice: req.body.realPrice,
billedPrice: req.body.billedPrice
});
domain.save(function(err) {
console.log(domain._id);
});
cli.domains.push(domain._id);
client.save(function(err,cli) {
// That's the one that makes it possible to save
// client.save();
});
res.redirect("/");
});
...
现在,
如果我将其保留为一个client.save(..)
,则会保存域名,但是会推送该域名,但不会保存客户端。
如果我取消注释另一个client.save()
,一切都会保存(我猜)。
那么问题又是什么,为什么我需要保存两次?
我想念这里真的很简单吗?
不要误解我 - 它有效,但我只需要了解它;)
感谢您的帮助。
更新/解决方案:
我遇到的所有问题都是因为我的ubuntu机器上安装了较旧的(2.4.9)mongodb版本,并且与mongodb使用的文档版本存在冲突。我在另一台机器上检查了相同的代码,一切正常。那是什么让我重新检查并安装了更新的mongodb以及清理实际的数据库,这使得一切都应该如此 - 当然 - 工作;)
答案 0 :(得分:0)
Mongodb本质上是异步的。您需要在domain.save的回调下移动client.save()。 For more help
Client.findOne({_id: req.params.client_id},function(err,client) {
var domain = new Domain({
_client: client.id,
name: req.body.name,
startDate: req.body.startDate,
endDate: req.body.endDate,
realPrice: req.body.realPrice,
billedPrice: req.body.billedPrice
});
domain.save(function(err, result) {
client.domains.push(result._id);
client.save();
});
res.redirect("/");
});
修改强>
我已经快速尝试了您的查询,它对我来说很好。