我有一个包含重复项的数据库,我试图与一个脚本合并,该脚本也合并了对这些重复项的引用。引用存储在数组中的对象中。
列出的两个集合的架构为:
主要:
-name (string)
-_id (ObjectId)
参考
-_id (ObjectId)
-name (string)
-references (Object) ----{
ref (references Main._id)
}
我的脚本当前如下所示:
db.collection('Main').find().toArray().then(async docs => {
for(const doc of docs) {
if(done[doc._id.toString()]) {
console.log(doc.name);
continue;
}
else {
const dups = await db.collection('Main').find({name: doc.name}).toArray();
if(dups.length > 1) {
for(const dup of dups) {
const res = await db.collection('References').updateOne({'references.ref': dup._id}, {$set: {'references.$.ref': doc._id}});
console.log(res.modifiedCount);
done[dup._id.toString()] = true;
}
}
}
}
})
如您所见,脚本将获取主集合中的所有文档,并搜索具有相同名称的重复项。然后,它获取重复项的ID,并将其更改为该名称的第一次出现。我得到一个返回的结果,说文档已被修改,但似乎没有任何变化,当然,仍然有重复的引用(我仍未在主集合中添加删除重复项的计划,因为我打算删除所有在参考集中没有参考的文档中,可以清除不必要的文档。
有人可以帮助我确定我的查询出了什么问题,从而使它无法更新参考文献集中文档中的ref键吗?