2012-08-22 40 views
2

我有一個像這樣(簡化)有沒有簡單的方法來獲取嵌套的兒童參考?

var Language = new Schema({ 
    name: String 
}); 
var PartOfSpeech = new Schema({ 
    name: String, 
    language: { type: ObjectId, ref: "Language" } 
}); 
var Attribute = new Schema({ 
    name: String, 
    partOfSpeech: { type: ObjectId, ref: "PartOfSpeech" } 
}); 

有一種簡單的方法來查詢的MongoDB,這樣給定一個語言的_id,它返回一個包含所有PartOfSpeech項引用該語言的結果集,和一個模式所有參考每個詞類的Attribute條目?

的結果集將是這個樣子:

[ 
    { 
    name: "Noun", 
    attributes: [ 
     { name: "Plural" }, 
     { name: "Possessive" } 
    ] 
    }, 
    { 
    name: "Verb", 
    attributes: [ 
     { name: "Past" }, 
     { name: "Future" } 
    ] 
    } 
] 

有一個簡單的方法在貓鼬做到這一點?

回答

2

像這樣

PartOfSpeech.find({ language: langId }, function (err, parts) { 
    if (err) return done(err); 

    var pending = parts.length; 
    if (0 === pending) return done(null, parts); 

    parts.forEach(function (part) { 
    Attr.find({ partOfSpeech: part }, function (err, attributes) { 
     if (err) return done(err, parts); 
     part.attributes = attributes; 
     if (--pending) return; 
     done(null, parts) 
    }) 
    }); 
}) 
相關問題