Как получить доступ к виртуальным мангустам в экспрессе

Я пытаюсь построить схему отношений «многие ко многим» и пытаюсь создать виртуальную для доступа к ней. Наконец, пытаясь получить встроенные объекты при запросе. Моя схема выглядит примерно так, как показано ниже

//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'
}

и пункт2 были

{
  _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'

Цените любой указатель в правильном направлении.


person Rukmaj    schedule 13.12.2016    source источник


Ответы (1)


Вы установили {toObject: true}, но пропустили его использование:

res.send(doc.toObject());
person joe.js    schedule 11.05.2017