Pharo, Voyage и MongoDB - PullRequest
       30

Pharo, Voyage и MongoDB

3 голосов
/ 21 марта 2019

Я хочу создать относительно простое веб-приложение, используя Pharo, Voyage и MongoDB + TeaPot. Перед тем, как начать проект, я провел много исследований, и остается один вопрос: как мне изначально загрузить группу данных в MongoDB? У меня в основном есть данные в формате CSV. Должен ли я программировать импортера в Smalltalk, который это делает? Если бы я делал это без разговоров, в нем не было бы всех идентификаторов объектов и т. Д. Как вы поступаете с такими вещами?

Спасибо, Хенрик

1 Ответ

4 голосов
/ 22 марта 2019

Если у вас есть данные в формате CSV, то я бы порекомендовал создать простой импортер.Вы можете использовать NeoCSV, а затем сохранить его через Pharo.Я предполагаю, что вы знаете, как настроить хранилище Mongo (@workspace):

| repository |
repository := VOMongoRepository 
              host: VOMongoRepository defaultHost 
              database: 'MyMongoDb'.
VORepository setRepository: repository.

Сначала создайте два метода класса для Voyage:

Kid class >> isVoyageRoot
    ^ true "instances of this object will be root"

Kid class >> voyageCollectionName
    ^ 'Kids' "The collection name in MongoDB"

Класс Kid должен иметь firstName(:), surname(:), age(:) аксессоры и переменные экземпляра с одинаковыми именами.

Затем просто получите чтение из CSV и затем сохраните его в mongoDB:

| personalInformation readData columnName columnData aKid |
"init variable"
personalInformation := OrderedDictionary new.
"emulate CSV reading"
readData := (NeoCSVReader on: 'firstName, surname, age\John, Smith, 5' withCRs readStream) upToEnd.
columnName := readData first.
columnData := readData second.
"Repeat for as many number of columns you may have"
1 to: columnName size do: [ :index |
    personalInformation at: (columnName at: index) put: (columnData at: index)
].
aKid := Kid new.   
"Storing Kid object information"
personalInformation keysAndValuesDo: [ :key :value |
    aKid perform: (key asString,$:) asSymbol with: value "For every column store the information into a Kid object (you have to have accessors for that)"
].
aKid save "Saving into mongoDB"

Это только для того, чтобы дать вам приблизительное представление

Для запроса в вашем MongoDB выполните:

db.Kids.find()

Вы должны увидеть сохраненную информацию.

Отказ от ответственности: Даже если код должен быть в порядке, у меня не было времени, чтобы проверить его на mongoDB.

...