Мой подход будет следующим:
- импортировать все ваши куски csv в коллекцию, скажем, 'temp' (да, это будет временно)
После этого ваша шма должна выглядеть примерно так (в зависимости от вашего 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"
}
}
выполнить запрос агрегации для этой коллекции, чтобы сгруппировать по идентификатору, добавить уникальные адреса в массив и создать новую коллекцию "people" с $ 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 во временной коллекции, это улучшит производительность вашей агрегации.