mongodb - Pharo、Voyage 和 MongoDB
问题描述
我想使用 Pharo、Voyage 和 MongoDB + TeaPot 构建一个相对简单的 Web 应用程序。在我开始这个项目之前,我做了很多研究,还有一个问题:我最初如何将一堆数据上传到 MongoDB 中?我基本上有 CSV 格式的数据。我是否必须在 Smalltalk 中编写一个进口商来做到这一点?如果我在没有 smalltalk 的情况下这样做,它将丢失所有对象 ID 等。你如何处理这样的事情?
谢谢, 亨里克
解决方案
如果您有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 上实际测试它。
推荐阅读
- azure - 在不知道列顺序的情况下通过 Polybase 摄取 CSV 文件
- javascript - 如何创建功能来检查是否至少选中了一个复选框?
- regex - 如何获取行直到空换行
- json-query - 如何使用 json 查询以同名键开头的 json 查询?
- c - 记忆应该有效
- xslt - 在 DNN XSLT 中获取电子邮件类型字段的值
- javascript - 如何使用节点 js 导出云 Firestore 中的动态嵌套集合数据?
- javascript - 拆分信息数组以正确发送请求和接收信息 React JavaScript
- apache-kafka - Http kafka 代理支持带有标头的消息
- ios - 可以将一个苹果开发者账户与主要苹果开发者账户关联吗?