基本上我有一个名为’people’的mongodb集合,其架构如下:
people: {
name: String,
friends: [{firstName: String, lastName: String}]
}
现在,我有一个非常基本的快速应用程序,它连接到数据库并成功地创建了一个带有空朋友数组的“人”。
在应用程序的次要位置,有一个用于添加朋友的表单。该表单接受 firstName 和 lastName ,然后带有 name 字段的 POST 也用于引用正确的人员对象。
我很难做的是创建一个新的朋友对象,然后将其“推送”到朋友数组中。
我知道当我通过 mongo 控制台执行此操作时,我使用 $push
作为查找标准后的第二个参数的更新功能,但我似乎找不到合适的方法让 mongoose 执行此操作.
db.people.update({name: "John"}, {$push: {friends: {firstName: "Harry", lastName: "Potter"}}});
原文由 Neurax 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设,
var friend = { firstName: 'Harry', lastName: 'Potter' };
您有两种选择:
更新内存中的模型,并保存(纯 javascript array.push):
或者
我总是尽可能地尝试第一个选项,因为它会尊重 mongoose 给你的更多好处(钩子、验证等)。
但是,如果您正在执行大量并发写入,您将遇到竞争条件,最终会出现令人讨厌的版本错误,以阻止您每次替换整个模型并失去您添加的前一个朋友。因此,只有在绝对必要时才使用后者。