我正在为一个新项目设计数据库结构,而且我对 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?