从虚拟属性解析引用的mongoose文档

时间:2016-03-16 06:08:15

标签: node.js mongoose

我正在尝试解决如何解析相关文档,以便可以从外部文件加载数据,而不知道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”?

1 个答案:

答案 0 :(得分:0)

同样的问题Asynchronous Setters/GettersSupport 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();
    })
  });