node.js - 具有一对多关系的 Mongoose 文档引用

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

我读过 Mongoose population文档,它具有一对多的关系,一个 Person 文档到多个 Story 文档,但让我感到困惑的部分是 where 而不是 Story 文档引用了它所属的 Person 文档,Person 架构对其进行了设置,因此它具有 Story 文档的数组它“拥有”。

我正在设置与此非常相似的东西。但我一直认为在创建新的 Story 文档以具有 Person 文档 ID 时会更容易。但也许那只是因为我更熟悉使用连接的 MySQL 关系。

如果这是最好的方法(我确信它是,因为它在文档中),当创建新的 Story 文档时,更新数组的最佳方法是什么它所属的相关 People 文档中的故事?我查看但找不到任何更新现有文档以添加对其他文档的引用(或就此删除它们)的示例

我确定这是一个我刚刚忽略的简单解决方案,但任何帮助都会很棒。谢谢!

最佳答案

请参阅 population ,这里摘录一个Mongoose的例子。

var mongoose = require('mongoose')
, Schema = mongoose.Schema

var personSchema = Schema({
  _id     : Schema.Types.ObjectId,
  name    : String,
  age     : Number,
  stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});

var storySchema = Schema({
  _creator : { type: Schema.Types.ObjectId, ref: 'Person' },
  title    : String,
  fans     : [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});

var Story  = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);

所以关于 Story 模型的示例将相关的 Person._id 存储在 Story._creator 中。当你找到一个 Story 的文档时,你可以使用 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);
});

我相信这就是您要找的。否则,您可以使用 nested collections而是。

https://stackoverflow.com/questions/34985846/

相关文章:

node.js - 未找到匹配项的 Mongoose 查询返回什么?

python - 让 Spark、Python 和 MongoDB 协同工作

mongodb - Mongoose 是否支持 Mongodb `findAndModify` 方法

mongodb - 在 MongoDB 中存储 ObjectId 及其字符串形式之间的区别

java - 如何通过Java在MongoDB中一次插入多个文档

node.js - 使用 2 个字段的 Mongoose 自定义验证

linux - Errr 'mongo.js:L112 Error: couldn' t 连接到服务

mongodb - 如何使用 Robomongo 连接到 MongoDB Atlas?

node.js - 使用 mongoose 在 mongodb 中设置集合的到期时间

mongodb - 我控制修补程序上的 Mongo 错误