我必须将数据从
{
"_id": "some-id",
"_class": "org.some.class",
"number": 1015,
"timestamp": {"$date": "2020-09-05T12:08:02.809Z"},
"cost": 0.9200000166893005
}
至
{"_id": {
"productId": "some-id",
"countryCode": "DE"
},
"_class": "org.some.class",
"number": 1015,
"timestamp": {"$date": "2020-09-05T12:08:02.809Z"},
"cost": 0.9200000166893005
}
新文档中的更改是_id字段替换为complex _id对象(productId:字符串,国家:字符串)。
国家/地区字段将为整个集合填写一个特定值- DE。
这个集合中有大约4000万条旧格式的记录和70万条新格式的记录。我想把这4000万条记录放到这个新的格式中。我使用的是mongo 3.6,所以我的功能有点有限,我可能需要使用聚合函数来创建一个全新的集合,然后删除旧的集合。
我将非常感谢帮助如何做到这一点-如何查询,将这样做应该看起来像和如何保持这些迁移700 k文档。
目前为止,我所得到的是:
db.productDetails.aggregate(
{$match: {_id: {$exists: true}}},
{$addFields: {"_id": {"productId": "$_id", "country": "DE"}},
{$project: {_id: 1, _class: 1, number: 1, timestamp: 1, cost: 1}},
{$out: "productDetailsV2"}
)
但只有在新表单中没有700 k个文档的情况下,此解决方案才有效。
1条答案
按热度按时间sgtfey8w1#
您的查询方向正确。您可能需要稍微修改
$match
筛选器,以更好地捕获旧类型文档。Mongo Playground