我有两个表titles
和members
,我想在title
内引用member
的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}});
}
}
})
}
})
}
它可以运行它,但是没有错误,但是没有任何改变。
答案 0 :(得分:2)
尝试这种方式
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
-您必须为查询中要更新的数组值指定完全匹配的值。
引荐链接: