【问题标题】:Add a field from external collection to current object - mongoose virtual将外部集合中的字段添加到当前对象 - mongoose virtual
【发布时间】:2017-04-06 16:10:40
【问题描述】:

我有一个名为“Ticket”的模型,它的架构是:

var TicketItemSchema = new Schema({
     externalId: String,
     price: Number,
     quantity: {
         type: Number,
         default: 1
     },
     comment: {
         type: String,
         default: '',
         trim: true
     }
});

我想在我的 'ticket' 对象中创建一个名为 'entity' 的新字段,该字段应自动添加并填充实体集合中的对象。

但问题是:我想使用 mongod 默认“id”以外的唯一字段。所以“填充”在这种情况下不起作用。

作为一种解决方法,在票证的模型类中,我尝试了这样的方法:

var Entity = mongoose.model('Entity').schema;
...
TicketItemSchema.virtual('entity').get(function() {
    Entity.findOne({
         "externalId": this.externalId
    }, function(err, entity) {
         return entity;
    });
 });

但它不起作用。那么您对此有何看法?

【问题讨论】:

    标签: mongoose virtual populate


    【解决方案1】:

    无法使用自定义字符串或 ID 进行填充。作为workaround,存在“虚拟”选项。

    但虚拟机只是 synchronous setters/getters 不提供异步调用选项,这是您尝试在虚拟机中执行的操作,但它不起作用。

    相反,您可以定义和使用instance method

    var Entity = mongoose.model('Entity').schema;
    ...
    
    TicketItemSchema.methods{
       getEntity : function(cb){
           return Entity.findOne({"externalId": this.externalId }, cb);
       }
    }
    

    并用它来获取票的实体:

    ticket.getEntity(function(err, entity){
       //entity of the ticket object
    })
    

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 1970-01-01
      • 2014-12-09
      • 2014-04-08
      • 2019-05-10
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多