0

私は多対多の関係スキーマを構築し、同じものにアクセスするために仮想を構築しようとしています。最後に、照会のときに埋め込みオブジェクトを取得しようとしました。私のスキーマは、結果の応答は、しかし明示的にmongoose仮想にアクセスする方法

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

でなければなりません

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

た下のようになりますI thを得ることができない同じ。 res.send(doc.Item2Details)を使ってみましたが、不運でした。また、クエリの検索でpopulateを使用しようとしましたが、それもいくつかのローカルと外部のエラーで失敗します。別の方法(http://mongoosejs.com/docs/populate.html)で定義されたバーチャルを持っていることを指していると仮定します。私がそれを試しても動作しませんでした。

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

正しい方向のポインタを理解してください。

答えて

0

あなたは{toObject: true}を設定していますが、それを使用して逃した:

res.send(doc.toObject()); 
関連する問題