Mongoose js:当字段不是列表时,是否应该嵌入文档
mongoose js: should documents be embedded when field is not a list?
下面是我的Schema
var UserModel = new Schema({
id: ObjectId
, email: String
, firstName: String
, lastName: String
, password: String
});
var MessageModel = new Schema({
id: ObjectId
, createdDate: { type: Date, default: Date.now }
, user: String // should this be [UserModel]?
, body: String
});
对于我的例子,每条消息都有一个用户,但只有一个。我应该嵌入UserModel还是我应该把用户字段作为一个字符串。未来的一个用例是返回一个查询,该查询包含消息体、创建日期和用户(连接的姓和名)。谢谢。
简短的回答:不,您不应该使用UserModel作为MessgeModel的子文档。
长回答:首先,重新考虑你的命名。这里实际上是在定义模式。稍后,您将把一个模型与这些模式中的每一个关联起来。因此,在这里使用UserSchema和MessageSchema会更合适。
但这不是密切相关的。关于您的问题,您的MessageModel模式不应该包含表示用户的嵌入式文档,除非存在一对一的关系。但是,我希望每个用户将与许多消息相关联(希望如此)。因此,您不希望用户创建的每条消息都有一个新的副本(每个副本都有一个新的_id
)。您只需要为每个用户提供一个规范文档,并在MessageModel中对该用户进行引用。
现在,使用字符串引用可能是正确的选择。但是,如果您预期在MessageModel上运行查询,并希望其中的user
属性由实际的UserModel文档填充,那么您将需要使用ref.
相关文章:
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- 是否可以使用有角度的HTML文档进行$编译
- 将事件发送到javascript文档的react本机模块是否正确
- 用javascript从窗口获取文档,同时检查文档是否已加载
- Ember文档理解-模型是否链接到模板
- 我是否可以使用 Angular 将鼠标向上事件绑定到文档正文
- 是否有 jQuery 事件用于何时将元素添加到文档中
- 是否可以引用猫鼬(MongoDB)上的子文档
- 检查JS是否可以访问iframe的文档
- 检查文档是否已经存在,如果是则更新,否则创建新的Mongoose
- Rect.map():文档是否错误
- 检查数组是否在MongoDB文档中包含帖子ID
- 是否可以检测IE何时忽略xml文档中的空白文本节点
- 如何使用撤消管理器确定文档是否有未保存的更改
- 是否有用于在网页中嵌入HTML文档的JavaScript组件
- 确定元素是否由 JS 添加,还是原始 HTML 文档 *OR* 检测脚本何时通过 InnerHTML 更新节点
- 不确定文档引用器是否正常工作
- 是否可以使用 JQuery.Load() 来替换整个文档
- 文档 .getElementById.innerHTML 是否在所有 sencha 应用程序上完全兼容
- 是否可以像真实用户交互那样进行JavaScript操作来更改文档的activeElement