我有两个表,titles
和members
,我想在member
中引用title
的id。
我的数据库结构如下所示:
// 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
- 必须为要更新的查询中的数组值指定完全匹配的值。
推荐链接:
MongoDB-JavaScript
更新数组中的值 (<array>
.$)