带有一对多关系的Mongoose文档引用

我正在为一个新项目devise一个数据库结构,而且我对MongoDB很陌生,显然是Mongoose。

我已经阅读了Mongooses 人口文档,它有一个一对多的关系,一个Person文档到很多Story文档,但是让我困惑的部分是在哪里,而不是Story文档引用什么Person文档, Person模式已经设置好了,所以它有一个它拥有的Story文档的数组。

我正在build立一个非常相似的东西。 但我一直认为创build具有Person文档ID的新Story文档会更容易。 但也许这只是因为我更熟悉使用连接的MySQL关系。

如果这是做这件事的最好方法(我敢肯定,自从它在文档中),当创build新的Story文档时,更新它所属的关联的People文档中的故事数组的最佳方式是什么? ? 我看了,但找不到更新现有文档的任何示例,以添加对其他文档的引用(或删除它们)

我确信这是一个简单的解决scheme,我只是忽略了什么,但任何帮助将是伟大的。 谢谢!

请参阅人口 ,这里从Mongoose中提取一个例子。

 var mongoose = require('mongoose') , Schema = mongoose.Schema var personSchema = Schema({ _id : Number, name : String, age : Number, stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }] }); var storySchema = Schema({ _creator : { type: Number, ref: 'Person' }, title : String, fans : [{ type: Number, ref: 'Person' }] }); var Story = mongoose.model('Story', storySchema); var Person = mongoose.model('Person', personSchema); 

所以关于这个例子, Story模型在Story._creator存储相关的Story._creator 。 当您findStory的文档时,可以使用populate()方法来定义您想要同时检索的Person模型中的哪个属性,例如:

 Story.findOne({_id: 'xxxxxxx'}).populate('person', 'name age').exec(function(err, story) { console.log('Story title: ', story.title); console.log('Story creator', story.person.name); }); 

我相信这是你要找的。 否则,您可以使用嵌套集合 。

正如在人口文件说

 var aaron = new Person({ _id: 0, name: 'Aaron', age: 100 }); aaron.save(function (err) { if (err) return handleError(err); var story1 = new Story({ title: "Once upon a timex.", _creator: aaron._id // assign the _id from the person }); story1.save(function (err) { if (err) return handleError(err); // thats it! }); //then add story to person aaron.stories.push(story1); aaron.save(callback); });