mongoose js:当字段不是列表时应该嵌入文档吗?

时间:2012-01-03 05:10:14

标签: javascript mongodb mongoose database

以下是我的架构。

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还是应该将用户字段保留为字符串。一个未来的用例是返回一个包含消息正文,创建日期和用户(连接的名字和姓氏)的查询。感谢。

1 个答案:

答案 0 :(得分:1)

简短回答:不,你不应该将UserModel用作MessgeModel的子文档。

答案很长:首先,重新考虑你的命名。您实际上是在这里定义模式。稍后,您将将模型与每个模式相关联。所以,UserSchema和MessageSchema在这里会更合适。

但那不是密切相关的。关于您的问题,您的MessageModel架构不应包含代表用户的嵌入式文档,除非存在一对一的关系。但是,我希望每个用户都会与许多消息相关联(希望如此)。因此,您不希望为他创建的每条消息创建用户的新副本(每个副本都有一个新的_id)。您只需要为每个用户提供一个规范文档,并在MessageModel中提供对该用户的引用。

现在,使用字符串引用可能是您的正确选择。但是,如果您预期在MessageModel上运行查询,您希望实际的UserModel文档填充user属性,那么您将需要使用ref