以下是我的架构。
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还是应该将用户字段保留为字符串。一个未来的用例是返回一个包含消息正文,创建日期和用户(连接的名字和姓氏)的查询。感谢。
答案 0 :(得分:1)
简短回答:不,你不应该将UserModel用作MessgeModel的子文档。
答案很长:首先,重新考虑你的命名。您实际上是在这里定义模式。稍后,您将将模型与每个模式相关联。所以,UserSchema和MessageSchema在这里会更合适。
但那不是密切相关的。关于您的问题,您的MessageModel架构不应包含代表用户的嵌入式文档,除非存在一对一的关系。但是,我希望每个用户都会与许多消息相关联(希望如此)。因此,您不希望为他创建的每条消息创建用户的新副本(每个副本都有一个新的_id
)。您只需要为每个用户提供一个规范文档,并在MessageModel中提供对该用户的引用。
现在,使用字符串引用可能是您的正确选择。但是,如果您预期在MessageModel上运行查询,您希望实际的UserModel文档填充user
属性,那么您将需要使用ref。