mongodb 哪种方法更适合POST或PATCH?

zlhcx6iw  于 2022-11-22  发布在  Go
关注(0)|答案(1)|浏览(225)

假设我有一个包含用户的数据库集合,我想将一个对象添加到一个文档内的数组中。

{
_id: "636e8e1dd710eed71565741c",
username: "test",
password: "$2b$10$/s9.kRYSax380Xrxf3xyVO9Z6Otc/WVx5kBSLKfu43/wYP.TSnzvW",
tasks: [{name: task1, status: "finished"}]
}

我会让它看起来像这样:

{
_id: "636e8e1dd710eed71565741c",
username: "test",
password: "$2b$10$/s9.kRYSax380Xrxf3xyVO9Z6Otc/WVx5kBSLKfu43/wYP.TSnzvW",
tasks: [{name: task1, status: "finished"}, {name: task2, status: "unfinished"}]
}

那么,哪种方法更合适呢,因为我在向一个嵌入式数组添加一个新对象,而不是更新一个已经存在的对象?谢谢。

4ioopgfo

4ioopgfo1#

POST和PATCH之间的选择取决于URL的路径。

POST /collection/636e8e1dd710eed71565741c/tasks
Content-Type: application/json

{"name": "task2", "status": "unfinished"}

但是,如果_id是有效负载的一部分,我更希望

PATCH /collection
Content-Type: application/json

{"_id": "636e8e1dd710eed71565741c",
 "tasks@add": [{"name": "task2", "status": "unfinished"}]}

但此有效负载格式依赖于“命名约定”:

  • _id用于标识要修补的条目。
  • 后缀@add表示任务被添加到现有数组中。
  • "tasks@change": [{"name": "task1", "status": "archived"}]将更新现有任务。

如果服务器知道每个任务由其name标识,则不需要后缀:

PATCH /collection
Content-Type: application/json

{"_id": "636e8e1dd710eed71565741c",
 "tasks": [{"name": "task1", "status": "archived"},
           {"name": "task2", "status": "unfinished"}]}

更新现有任务并添加新任务。或者甚至

PATCH /collection/636e8e1dd710eed71565741c/tasks
Content-Type: application/json

[{"name": "task1", "status": "archived"},
 {"name": "task2", "status": "unfinished"}]

我希望这些例子能帮助你找到一个合适的模式。

相关问题