我正在尝试解决如何解析相关文档,以便可以从外部文件加载数据,而不知道mongodb的内部ID。
所以我想我可以用虚拟属性做这样的事情,我使用备用标识符查找值并替换ObjectId:
InventorySchema.virtual('locationIdentifier')
.set(function (identifier) {
var inventory = this;
Location.findOne({'identifier': identifier}, function(err, result){
if (err || !result){
this.location = undefined;
return;
}
inventory.location = result._id;
})
});
但是setter是同步的,而查找是异步的。所以我认为这就是为什么价值不会被我需要的时间所填充。在异步调用完成之前,是否有推荐的方法来“阻止setter”?
答案 0 :(得分:0)
同样的问题Asynchronous Setters/Getters和Support for Asynchronous Virtual 在mongoose中讨论,要解决的一个解决方案是使用custom method
,示例代码如下所示。
InventorySchema.method('SetLocationIdentifier', function (identifier, cb) {
var inventory = this;
Location.findOne({'identifier': identifier}, function(err, result){
if (err || !result){
this.location = undefined;
return cb();
}
inventory.location = result._id;
cb();
})
});