是否有一种简单的方法来获得嵌套的子引用?

时间:2012-08-22 22:53:42

标签: node.js mongodb mongoose

我有这样的架构(简化)

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" }
     ]
   }
]

在Mongoose中有直接的方法吗?

1 个答案:

答案 0 :(得分: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)
    })
  });
})