使用mongoose填充“加入”匹配的子记录

时间:2013-10-15 00:17:00

标签: node.js mongodb mongoose

使用node.js,mongoose(3.5+),mongodb。在DB中有两个集合:

var AuthorSchema = new mongoose.Schema({
    name: { type: String },
});

var StorySchema = new mongoose.Schema({
    title: { type: String },
    author: { type: type: Schema.Types.ObjectId },
});

我想要做的是检索作者并使用从Story中查找并与作者匹配的子集(例如“故事”)填充它。是的,很像SQL连接。

所有这些例子都在AuthorSchema上工作,它有一个引用StorySchema对象的objectids数组 - 工作正常。但我想走向相反的方向;部分原因是最小化插入/更新。如果我按照示例添加新商店,则需要添加新的Story文档并更新作者。我想插入一个引用作者的新故事。

我怀疑populate()是正确的方法,但无法让它发挥作用。我正在做这样的事情:

Author.find({name: 'Asimov').populate({
    path: 'stories',
    model: 'Story',
    match: {'author': this['_id']},
}).exec(function(err, authors) {
  console.log(authors);
})

但是这并没有返回任何故事成员在返回的作者。这不是一个populate()解决方案吗?我真的需要以不同的方式构建模式吗?或者是mongoose / mongo的其他功能可以做我正在寻找的东西。

1 个答案:

答案 0 :(得分:-1)

在故事模式中,执行以下操作:

author: { type: type: Schema.Types.ObjectId, ref:'Author' }, //or whatever the model name is

然后你可以运行

Story.find({}).populate('author').exec(function(err,stories) {...});