我想使用Pharo,Voyage和MongoDB + TeaPot构建一个相对简单的Web应用程序。在开始该项目之前,我做了很多研究,仍然存在一个问题:我最初如何将大量数据上传到MongoDB中?我基本上有CSV格式的数据。我必须在Smalltalk中为导入程序编程吗?如果我没有进行细说,那么它将丢失所有对象ID等。如何处理类似的事情?
谢谢, 亨里克
答案 0 :(得分:4)
如果您拥有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上进行实际测试。