MongoDB存储随机数据

问题描述 投票:1回答:1

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

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

从.csv文件中读取,在创建Person对象的实例时,我被迫将数据分块,因为数据集太大了。同时,我想创建一个模式,使一个人记录包含ID和一个地址列表(我想聚合对应一个人的地址并从中创建一个Person对象)。最简单的方法是什么?我应该创建某种中间模式并尝试将其组合起来吗?

java database spring mongodb dataset
1个回答
1
投票

我的方法如下:

  • 导入集合中的所有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字段上创建索引,这将提高聚合的性能。

© www.soinside.com 2019 - 2024. All rights reserved.