代码之家  ›  专栏  ›  技术社区  ›  John Kim

MongoDB存储随机数据

  •  1
  • John Kim  · 技术社区  · 6 年前

    我不知道如何解决这个问题。

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   matthPen    6 年前

    我的方法如下:

    • 导入集合中的所有csv块,比如说“temp”(是的,它是临时的)

    {_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"}
       ])
      

    这将生成具有以下文档结构的集合(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"}
        ]
        }
    }