MongoDB хранит случайные данные - PullRequest
0 голосов
/ 09 сентября 2018

Я застрял в том, как подойти к этой проблеме.

У меня очень большой набор данных с ~ миллионами записей. Каждая строка содержит человека, его / ее идентификатор и его / ее адрес. Но у человека может быть несколько адресов, а данные вообще не организованы.

При чтении из файла .csv я вынужден разбивать данные на части при создании экземпляров объекта Person, потому что набор данных очень большой. В то же время я хочу создать схему, в которой одна запись о человеке содержит идентификатор и список адресов (я хочу объединить адреса, соответствующие одному человеку, и создать из него один объект Person). Какой самый простой способ подойти к этому? Должен ли я создать какие-то промежуточные схемы и попытаться их объединить?

1 Ответ

0 голосов
/ 09 сентября 2018

Мой подход будет следующим:

  • импортировать все ваши куски 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 во временной коллекции, это улучшит производительность вашей агрегации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...