javascript - 将字段推送到对象数组的每个元素(MongoDB)
问题描述
假设我有一些此类文件:
{
_id: ObjectId("5abe0f5add80a30001eff68d"),
obj_array: [
{
a: 1,
b: "some",
c: 134
},
{
a: 2,
b: "aaa",
c: 564
}
]
}
我需要做的是通过推送一个新字段obj_array
来更新所有元素。预期结果: d: "new_value"
{
_id: ObjectId("5abe0f5add80a30001eff68d"),
obj_array: [
{
a: 1,
b: "some",
c: 134,
d: "new_value"
},
{
a: 2,
b: "aaa",
c: 564,
d: "new_value"
}
]
}
obj_array
除了构造新对象并doc.obj_array
使用新数组进行设置外,我没有找到任何其他解决方案。我想知道有没有更优雅的方法来做到这一点?这是我的代码:
myTable.find().forEach(function(document) {
var new_array = [];
document.obj_array.forEach(function(elem) {
elem.d = "new_value";
new_array.push(elem);
})
myTable.update({_id: document._id}, {$set: {obj_array: new_array}})
})
解决方案
您可以使用 $[]
all 位置运算符来更新数组中的所有元素
myTable.update(
{ "_id": document._id },
{ "$set": { "obj_array.$[].d": "new_value" }}
)
推荐阅读
- pagespeed - 我不知道如何解决页面速度错误
- algorithm - 谁能告诉我为什么我的算法是错误的?
- android - TargetSdkVersion 为 28 但最高 api 级别为 26
- c++ - 使用 GMock 模拟将函数作为参数的方法
- snowflake-cloud-data-platform - 如何在雪花中编写相关子查询
- wpf - MVVM:我应该将文本框直接绑定到模型还是应该先创建一个完整的属性?
- python - 如何在 Python 2.6 中使用 Keytab 检索 Kerberos 令牌
- java - 使用 JNA 从 dll 中获取类型
- php - PHP & Carousel - 在我的数据库中获取图像的轮播中循环图像
- oauth-2.0 - 如何在没有最终用户在 Azure 中使用 AD 帐户登录的情况下保护 API?