javascript - mongodb:全局将对一个ObjectID的所有引用替换为另一个ObjectID?

标签 javascript mongodb mongo-shell

所以我有一个 MongoDB 数据库,其中几个集合中有数百万条记录。这是一些记录的(大大简化的)示例...

集合 A 文档如下所示:

{ 
  _id: ObjectID(....)
  name: "Hubert Humphrey"
}

集合 B 文档如下所示:

{
  _id: ObjectID(....)
  ReferenceSummary: [
    { 
      person: ObjectID(<some-ID-from-Collection-A>)
      count: 312
    },
    { 
      person: ObjectID(<some-other-ID-from-Collection-A>)
      count: 42
    },
    ...
  ], 
  TopPeople: [ ObjectID(<another-ID-from-Collection-A>), ObjectID(<yet-another-ID-from-Collection-A>), ...]
}

现在问题来了。我们意识到集合 A 中有一些重复项(只有 3 或 4 个)。而它们在集合 B 中均被引用了数十万次。

但是,不存在给定集合 B 文档引用两个不同的集合 A 文档且彼此重复的情况。

所以,我需要做的是解决这个问题:对于集合 A 中的每对重复项,使用 _idObjectId(X) ObjectId(Y),将集合 B 中所有文档中出现的所有 ObjectId(Y) 替换为 ObjectId(X)

如果我处理原始 JSON 文件,我只需进行字符串替换即可完成。

是否有一种简单的方法可以在 mongo shell 中执行此操作,只需对每个集合 A 重复项使用一个命令?

最佳答案

完成这项工作的最简单方法是使用 forEach 循环

var ids = [id1, id2, ...., idN];
var idsToReplace = [id1TR, id2TR, ...., IdNTR];
var aLenght = ids.lenght;

for (var i = o; i < aLenght; i++) {
    db.collectionA.find({
        _id : ids[i]
    }).forEach(function (doc) {
        doc.fieldA = idsToReplace[i];
        // if we habve an array entry we need to iterate thru it
        var arrayXLenght = doc.arrayX.lenght;
        for (var j = 0; j < arrayXLenght; j++) {
            if (doc.arrayX[j].field === ids[i]) {
                doc.arrayX[j].field = idsToReplace[i];
            }
        }

        prinjson(doc); //verify changes
        //doc.save() //uncoment when you wil be assured that changes are ok
    })

    // same thing with other collection
}

关于javascript - mongodb:全局将对一个ObjectID的所有引用替换为另一个ObjectID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37796251/

相关文章:

mongodb - mongodb 的 'updateMany' 函数是否已弃用?

带有 OS Catalina 的 MongoDB 服务器

javascript - 如何扫描段落中的主题标签并将它们放入 Javascript/AngularJS 中的数组中

javascript - Mongo shell 中的 NumberLong 算法

javascript - .next() 方法并跳过特定元素

node.js - 蒙戈斯 : wrong ELF class: ELFCLASS32 nodejs application in openshift

php - 在 PHP Phalcon 框架中使用 MongoDb

javascript - 如何使用mongo shell加载多个js文件到数据库?

javascript - 显示/隐藏切换按钮未按预期工作

JavaScript JQuery Ajax 问题 : POST Works fine in Firefox, IE、Safari 但不是 Chrome