Javascript MongooseJS:当字段不是列表时,是否应该嵌入文档?
下面是我的模式Javascript MongooseJS:当字段不是列表时,是否应该嵌入文档?,javascript,mongodb,mongoose,database,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:
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用作MesseModel的子文档 长回答:首先,重新考虑你的名字。您实际上是在这里定义模式。稍后,您将把一个模型与这些模式中的每一个相关联。因此,UserSchema和MessageSchema在这里更合适 但这并不是密切相关的。关于您的问题,您认为MessageModel模式不应该包含代表用户的嵌入文档,除非存在1对1关系。但是,我希望每个用户都会与许多消息关联(希望如此)。因此,您不希望为用户创建的每条消息都有一个新的副本(每个副本都有一个新的
\u id
)。对于每个用户,您只需要一个规范文档,并在MessageModel中引用该用户
现在,使用字符串引用可能是正确的选择。但是,如果您希望在MessageModel上运行一个查询,在该查询中,user
属性将由实际的UserModel文档填充,那么您将需要使用