mongodb - 如何在mongodb中用ObjectIds数组替换字符串数组
问题描述
我有两个表,titles
我members
想引用title
inside的 id member
。
我的数据库结构如下所示:
// collection titles
{
"_id": ObjectId("5dd5brf45d1320b01edc1432"),
"name": "mother"
}
{
"_id": ObjectId("3dw5brf45t3320b01edc2864"),
"name": "wife"
}
// collection members
{
"_id": ObjectId("5rd7tjh23t5786k42edf9753"),
"firstName": "Mary",
"familyTitles": ["mother", "wife"]
}
但我想将其替换为
// collection members
{
"_id": ObjectId("5rd7tjh23t5786k42edf9753"),
"firstName": "Mary",
"familyTitles": [ObjectId("5dd5brf45d1320b01edc1432"), ObjectId("3dw5brf45t3320b01edc2864")]
}
这是我尝试过的脚本:
db.members.find({}).forEach((member) => {
member.familyTitles.forEach((familyTitle, i) => {
var titleId = db.titles.findOne({name: familyTitle});
member.familyTitles[i].update({$set: {i: titleId._id}})
})
})
但我收到以下错误:TypeError: member.familyTitles is undefined
.
--- 编辑 1 ---
我试图修改我的脚本如下:
var members = db.members.find({});
if (members) {
members.forEach((member) => {
if (member.familyTitles) {
member.familyTitles.forEach((familyTitle, i) => {
if (familyTitle) {
var titleId = db.titles.findOne({name: familyTitle});
db.members.update({_id: member._id}, {$set: {"familyTitles.$": titleId._id}});
}
}
})
}
})
}
它运行它,但它没有错误,但它没有进行任何更改。
解决方案
试试这个方法
db.titles.findOne({name: familyTitle}).then(title => {
db.members.update({_id: member._id,familyTitles:title.name }, {$set: {"familyTitles.$": title._id}});
}
findOne
- 这是async
方法,因此您可以使用then
方法获取结果,也可以使用await
(async_await.js) 运算符在操作完成后获取结果。
familyTitles:title.name
- 您必须为要更新的查询中的数组值指定完全匹配的值。
参考链接:
推荐阅读
- r - 如何检查 Shiny 应用程序是否在特定的 ip 和地址上运行?
- scala - ScalaZ3 安装问题 - 找不到版本
- node.js - 如何在 Sveltekit 中集成 sqlite3?
- python - 在图中翻转指数标签并获得指数信息
- javascript - 未定义的 Keycloak 属性 Authenticated 和 UserInfo
- firebase - Flutter + Firebase - 将图像文件上传到存储
- javascript - 当音频组件处于焦点时,从图像和音频列表中播放音频
- c - 常青K&R ex。1-21 安塔布
- php - APNs 中的 BAD Device Token - 建立与 APNs 的基于令牌的连接
- oracle - 19.9 的 Oracle 补丁。“您没有下载此补丁所需的访问权限。”