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'
正しい方向のポインタを理解してください。