如何在mongodb中用ObjectId数组替换字符串数组



我有两个表,titlesmembers,我想在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>.$)

最新更新