在 MEAN 堆栈中更新 MongoDB 集合时添加引用的正确模式
Posted
技术标签:
【中文标题】在 MEAN 堆栈中更新 MongoDB 集合时添加引用的正确模式【英文标题】:Correct pattern for adding references on update of a MongoDB collection in the MEAN stack 【发布时间】:2014-09-07 09:16:53 【问题描述】:我正在学习 MEAN 堆栈,我使用 meanjs.org 作为起点,并用它为新对象生成脚手架。
我正在尝试找出除了服务器代码之外,如何在客户端 Angular 代码中实现正确的模式。
假设我有一个会议集合,每个会议都包含一组参与者对象(通过引用,而不是嵌入)。
因此我的 javascript 对象可能如下所示:
meeting:
_id: 123456,
location: "Room 222",
startDatetime: ....,
endDatetime: ....,
participants: [
_id: 33333 ,
_id: 44444
]
如果我想添加一个参与者(并假设我有那个新参与者的 id),我可以通过多种方式实现:
-
在 Angular 控制器中处理添加到参与者数组的内容,然后将新 ID“推送”到数组中。然后调用典型的 REST 更新 api(在平均堆栈中是服务/ng 资源)来处理更新。然后在服务器 (mongoose) 上,可以通过获取数组中添加的条目并调用适当的函数来添加参与者来处理此问题。
拥有一个单独的 REST 函数来处理添加参与者并实现类似于 #1。
其他一些让事情变得简单和干净的方法。
推荐的方法是什么(从 MEAN 架构或从 RESTful 架构或从 mongoose/MongoDB 的角度推荐)来实现这个?
【问题讨论】:
【参考方案1】:我不认为这个问题只有一个正确答案。假设您添加参与者的次数多于编辑会议的其余数据(例如位置和开始时间),我将添加一个单独的节点端点,该端点仅添加给定会议 ID 的参与者。然后我会使用 $addToSet 将它们添加到 Mongo,其中 $each 用于多个参与者。
在角度方面,我将创建一个角度服务,该服务对节点服务器进行 $resource 调用,只传入新参与者和会议 ID。我的角度控制器会调用角度服务来保存新参与者。
【讨论】:
以上是关于在 MEAN 堆栈中更新 MongoDB 集合时添加引用的正确模式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MEAN 堆栈中调试 Mongoose 和 MongoDB?
在 MongoDB 中存储和返回 ObjectId(MEAN 堆栈)