【发布时间】:2016-06-13 17:56:50
【问题描述】:
所以我有一个 MongoDB 数据库,在几个集合中包含数百万条记录。这是一些记录的(非常简化的)示例...
Collection 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>), ...]
}
现在问题来了。我们意识到我们在 Collection A 中有几个重复项(只有 3 或 4 个)。在 Collection B 中,它们每个都被引用了数十万次。
但是,没有给定集合 B 文档引用两个不同的集合 A 文档的情况,这些文档是彼此重复的。
所以,我需要做的是解决这个问题:对于集合 A 中的每一对重复项,使用 _id 的 ObjectId(X) 和 ObjectId(Y),将所有出现的 ObjectId(Y) 替换为 ObjectId(X) Collection B 中的所有文档。
如果我处理的是原始 JSON 文件,我只需进行字符串替换即可。
有没有一种简单的方法可以在 mongo shell 中执行此操作,只需对每个 Collection A 副本使用一个命令?
【问题讨论】:
-
我假设那个人是重复的——你有办法选择重复的吗(这是通过 id 字段或其他元数据?)
-
只是少数特定的重复,是手动输入错误造成的。一次替换对其中一个的所有引用的简单方法可以解决问题。
标签: javascript mongodb mongo-shell