法罗、远航和MongoDB

法罗、远航和MongoDB,mongodb,smalltalk,pharo,Mongodb,Smalltalk,Pharo,我想用Pharo、Voyage和MongoDB+茶壶构建一个相对简单的web应用程序。在我开始这个项目之前,我做了很多研究,还有一个问题:我最初如何将大量数据上传到MongoDB?我基本上有CSV格式的数据。我需要用Smalltalk为进口商编程吗?如果我在没有smalltalk的情况下做这件事,它将丢失所有的对象ID等。你如何处理类似的事情 谢谢, Henrik如果您有CSV格式的数据,那么我建议您创建一个简单的导入器。您可以使用NeoCSV,然后通过Pharo保存它。我想您知道如何设置Mon

我想用Pharo、Voyage和MongoDB+茶壶构建一个相对简单的web应用程序。在我开始这个项目之前,我做了很多研究,还有一个问题:我最初如何将大量数据上传到MongoDB?我基本上有CSV格式的数据。我需要用Smalltalk为进口商编程吗?如果我在没有smalltalk的情况下做这件事,它将丢失所有的对象ID等。你如何处理类似的事情

谢谢,
Henrik

如果您有
CSV
格式的数据,那么我建议您创建一个简单的导入器。您可以使用
NeoCSV
,然后通过Pharo保存它。我想您知道如何设置Mongo存储库(@workspace),您应该:

首先为Voyage创建两个类方法:

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

Kid class >> voyageCollectionName
    ^ 'Kids' "The collection name in MongoDB"
Kid类应该有同名的
名字(:)
姓氏(:)
年龄(:)
科目和实例变量

然后只需读取
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上实际测试它。

再次感谢您详尽的回答。他们真的很有帮助。我曾经是一名Oracle DBA,除了关系型DBs之外,从未使用过其他任何东西。真的很好奇-但也有点怀疑-尝试这个@欢迎你。我承认我白天跑得太快了,代码看起来很糟糕,有问题。我希望我已经修好了。如果你想要一个Smalltalk db,你应该看看GemStone,它是高质量的db。
| 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"