使用Mongoose
和RESTful API
,我想有2个收藏集(organizations
和projects
),而前者的Schema
应该收藏类型为projects
的字段[ObjectId]
,其中引用了后者的文档,反之亦然。
创建一个新的组织(POST / organizations)可以(a)将projects
字段留为空白,以后再添加项目文档(POST / projects),或者(b)已经使用它创建了一些项目。
(b)的问题:
这似乎与RESTfulness冲突,因为发布了一个 新组织应具有与发布新API不同的API点 新项目-但我们希望一次性实现两者。
创建新组织时,字段projects
应该包含一个数组
的ObjectIds引用了相应的项目-但是这些
还没有ID。
可能有很多方法可以实现目标-即2个连续的POST请求:首先是项目,然后是组织。 但我想了解这种szenario的最佳做法。
Oranization模式:
{
name: { type: String, required: true },
address: { type: String },
// projects = array of ObjectIds referring to Project documents
projects: { type: [Mongoose.Schema.Types.ObjectId] }
}
项目架构:
{
name: { type: String, required: true },
start: { type: Date },
end: { type: Date },
organization: { type: Mongoose.Schema.Types.ObjectId }
}
提供的问题描述和代码是一个较大项目的简化示例,该项目将具有许多模型/集合以及大量交叉引用。
一个人可以将项目作为组织文档的子文档的数组,但是我宁愿将这些项目作为一个独立的集合,因为应该可以为项目视图请求整个集合,而不必搜寻组织文档。
答案 0 :(得分:0)
好的,所以我在另一个post中发现了一些好主意(关于发布具有相同资源类型的多个项目-而不是发布包含另一个资源类型的另一个项目的项目):>
@RESTfulness:
资源无需映射到您的数据库或应用程序模型
因此,基本上,我可以将“组织”视为可以包含一个项目并执行POST请求/organizations
的资源,然后在服务器端为该项目集合创建一个新文档,然后为组织集合(将项目文档的ObjectId推送到projects
字段)。
问题在于响应,当更新数据库时出现问题时:响应应包含有关文档创建失败的信息。
或者,只要在表单中填写姓名和地址,就可以发送POST请求/organizations
。这将导致将组织添加到数据库的组织集合中。然后,如果将项目添加到相同的表单中,我们将执行另一个POST请求/projects
,并将其与新创建的组织ID一起传递。在服务器端,我们创建一个新的项目文档,然后将其ID推送到组织文档的projects数组中。