MongoDB存储随机数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB存储随机数据相关的知识,希望对你有一定的参考价值。
我被困在如何处理这个问题。
我有一个非常大的数据集,有大约百万条记录。每行包含一个人,他/她的ID和他/她的地址。但是一个人可能有多个地址,而且数据根本没有组织。
从.csv文件中读取,在创建Person对象的实例时,我被迫将数据分块,因为数据集太大了。同时,我想创建一个模式,使一个人记录包含ID和一个地址列表(我想聚合对应一个人的地址并从中创建一个Person对象)。最简单的方法是什么?我应该创建某种中间模式并尝试将其组合起来吗?
答案
我的方法如下:
- 导入集合中的所有csv块,让我们说'temp'(是的,它将是临时的)
在那之后,你的shema应该是这样的(取决于你的csv):
{_id : ObjectId(abcd11241545),
id : 001 <======== your id
address : {
street : "56 avenue des Champs Elysee",
street2 :"",
zip : "75000",
city:"Paris",
country:"France"
}
}
{_id : ObjectId(abcd11241545),
id : 001
address : {
street : "23 rue de la plage",
street2 :"Residence du soleil",
zip : "06000",
city:"Nice",
country:"France"
}
}
- 在该集合上执行aggregation query以按ID分组,在数组中添加唯一地址,并使用$out阶段创建新的集合“人员”:
db["temp"].aggregate([ {$group:{ _id:"$id", addresses : {$addToSet : "$address"} } }, {$out : "persons"} ])
这将生成集合(人员)(或覆盖它,请注意,如果它已经存在),具有以下文档结构:
{_id : 001,
addresses : [
{street : "56 avenue des Champs Elysee",
street2 :"",
zip : "75000",
city:"Paris",
country:"France"},
{street : "23 rue de la plage",
street2 :"Residence du soleil",
zip : "06000",
city:"Nice",
country:"France"}
]
}
}
如果您的集合非常大,请在临时集合中的id字段上创建索引,这将提高聚合的性能。
以上是关于MongoDB存储随机数据的主要内容,如果未能解决你的问题,请参考以下文章