问候所有,
我想重复调用一个函数,但希望每个调用仅在前一个调用完成时运行.Async是否适合我的需要?或者这些呼叫并行发生?
谢谢!
加里
大家好!
我在下面定义了一个Mongoose模式并注册了一个模型(InventoryItemModel).有没有办法为模式创建自定义构造函数,这样当我从模型中实例化一个对象时,将调用该函数(例如,从数据库加载带有值的对象)?
var mongoose = require('mongoose')
, Schema = mongoose.Schema
var InventoryItemSchema = new Schema({
Sku : String
, Quanity : Number
, Description : String
, Carted : []
, CreatedDate : {type : Date, default : Date.now}
, ModifiedDate : {type : Date, default : Date.now}
});
mongoose.model('InventoryItem', InventoryItemSchema);
var item = new InventoryItem();
Run Code Online (Sandbox Code Playgroud)
我可以添加一些自定义构造函数,以便在实例化时从数据库中填充项目吗?
我在完成数据库工作后试图断开mongoose连接,但似乎没有用
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/myDatabase');
var MyModel = mongoose.model('MyModel', MySchema);
//do something here
mongoose.disconnect();
Run Code Online (Sandbox Code Playgroud)
第一次一切正常,但第二次运行代码时,我收到错误"试图打开未关闭的连接".我也试过mongoose.connection.close(); 并得到了相同的结果.
有人可以帮我这个吗?
非常感谢你!
加里
我想我想出来了.
在我的代码中,我试图用我的模型与数据库做一些事情:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/myDatabase');
var MyModel = mongoose.model('MyModel', MySchema);
MyModel.findOne({}, function () {...});
mongoose.disconnect();
Run Code Online (Sandbox Code Playgroud)
看到问题?由于Nodejs的非阻塞功能,"断开"在"findOne"完成之前执行,所以当然它不起作用!
解决方案是将断开连接到回调函数:
MyModel.findOne({}, function () {
...
mongoose.disconnect();
});
Run Code Online (Sandbox Code Playgroud) 问候所有,
我定义了一个深度嵌入的猫鼬模型"Person",它包含一个字段"Contact",而"Contact"有一个"Address"数组,用于该人的工作,家庭,交付等地址.
当我想更新地址并使用模型的"保存"功能时,更改未反映在数据库中.
console.log(person.Contact.Address[i].City = 'Chicago');
person.save(function (err) {
if (!err) {
console.log(person.Contact.Address[i].City);
Run Code Online (Sandbox Code Playgroud)
console.log指示字段City已更新为新值,但mongodb的值保持不变.
你能帮我解决这个问题吗?
谢谢!加里