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

在 Mongoose 中是否有一种简单的方法可以做到这一点?

4

1 回答 1

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)
    })
  });
})
于 2012-08-23T22:46:05.563 回答