【问题标题】:How to access mongoose virtuals in express如何在 express 中访问 mongoose virtuals
【发布时间】:2017-04-28 16:01:59
【问题描述】:

我正在尝试构建多对多关系架构并尝试构建一个虚拟来访问它。最后在查询时尝试获取嵌入的对象。我的架构如下所示

//Mongoose Schema
var item1 = new Schema ({
  _id: Number,
  Item2Id: [{type: Number, ref: item2}],
  Detail1: String,
  Detail2: String
  ...
},{toObject:{virtuals:true},toJSON:{virtuals:true}});

var item2 = new Schema ({
  _id: Number,
  Item1Id: [{type: Number, ref: item1}],
  Detail1: String,
  Detail2: String
  ...
},{toObject:{virtuals:true},toJSON:{virtuals:true}});

item1.virtual('Item2Details').get(function() {
  var ids = this.Item2Id;
      details = [];
  ids.forEach(function(id, idx, array) {
    item2.findOne({'_id': id}).exec(function (err, doc) {
      details.push(doc);
      if(idx === array.length - 1)
        return details;
    });
  });
});

//app.js
app.get('/item1/:id', function(req, res){
  item1.findOne({'_id':req.params.id}).exec(function(err, doc){
    res.send(doc);
  });
});

我的期望是如果 item1 是

{
  _id:1,
  Item2Id: [2, 3],
  Detail1: 'abc',
  Detail2: 'xyz'
}

和 item2 是

{
  _id:2,
  Item2Id: [1],
  Detail1: 'abc',
  Detail2: 'xyz'
}
{
  _id:3,
  Item2Id: [1],
  Detail1: 'abc',
  Detail2: 'xyz'
}

产生的响应应该是

{
  _id:1,
  Item2Id: [2,3],
  Item2Details: [
   {_id:2,
    Item2Id: [1],
    Detail1: 'abc',
    Detail2: 'xyz'},
  {_id:3,
    Item2Id: [1],
    Detail1: 'abc',
    Detail2: 'xyz'}],
  Detail1: 'abc',
  Detail2: 'xyz'
}

但是,我无法得到相同的结果。我试过了,使用 res.send(doc.Item2Details) 并没有运气。还尝试在查找查询中使用填充,它也因一些本地和外部错误而失败。假设它指的是以不同的方式定义虚拟 (http://mongoosejs.com/docs/populate.html),即使我使用以下链接尝试它也不起作用。

ref: 'item2',
localField: '_id',
foreignField: 'Item2Id'

欣赏任何指向正确方向的指针。

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema mongoose-populate


    【解决方案1】:

    您设置了{toObject: true},但您错过了使用它:

    res.send(doc.toObject());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-14
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2015-02-26
      • 2013-08-16
      相关资源
      最近更新 更多