Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongooseJS:当字段不是列表时,是否应该嵌入文档?_Javascript_Mongodb_Mongoose_Database - Fatal编程技术网

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文档填充,那么您将需要使用