MongoDB存储随机数据



我被困在如何处理这个问题上。

我有一个非常大的数据集,有~百万条记录。每行包含一个人,他/她的ID和他/她的地址。但是一个人可能有多个地址,并且数据根本没有组织。

从.csv文件中读取,我被迫在创建 Person 对象的实例时对数据进行分块,因为数据集太大了。同时,我想创建一个架构,以便一个人记录包含 ID 和地址列表(我想聚合对应于一个人的地址并从中创建单个 Person 对象(。解决这个问题的最简单方法是什么?我应该创建某种中间模式并尝试组合它吗?

我的方法是以下:

  • 导入集合中的所有 CSV 块,假设"临时"(是的,这将是临时的(

之后,你的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"    
}
}
  • 对该集合执行聚合查询以按 ID 分组,在数组中添加唯一地址,并创建一个具有$out阶段的新集合"persons":

    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 字段上创建索引,这将提高聚合的性能。

最新更新