我的方法如下:
- 将所有 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"
}
}
-
对该集合执行aggregation query 以按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 字段上创建一个索引,这将提高您的聚合性能。