2013-10-15 36 views
3

使用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 }, 
}); 

我想要做的是检索作家和一个子集合填充它(比方说,“故事”)是从故事一抬头,匹配的作者。是的,很像SQL连接。

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

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

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

但是,这并不返回任何故事成员在返回的作者。这不是一个填充()解决方案吗?我真的需要以不同的方式来构建模式吗?或者,还有一些其他的功能是猫鼬/蒙哥,它可以做我正在寻找的东西。

+0

你找到一个方法来做到这一点?我有同样的问题。 – nirvair

回答

-1

在故事模式中,这样做:

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

,那么你可以运行

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

这并不能解决原来的问题。我想获取作者通过加载和填充作者所写的所有故事的列表。您的解决方案要求我加载所有存储的文件,填充他们的作者,然后确定加载的作者是否是我想要的作者。我想要反向查询。 –