【问题标题】:Pharo, Voyage and MongoDBPharo、Voyage 和 MongoDB
【发布时间】:2019-03-21 15:07:21
【问题描述】:

我想使用 Pharo、Voyage 和 MongoDB + TeaPot 构建一个相对简单的 Web 应用程序。在我开始这个项目之前,我做了很多研究,还有一个问题:我最初如何将一堆数据上传到 MongoDB 中?我基本上有 CSV 格式的数据。我是否必须在 Smalltalk 中编写一个进口商来做到这一点?如果我在没有 smalltalk 的情况下执行此操作,它将丢失所有对象 ID 等。你如何处理这样的事情?

谢谢, 亨里克

【问题讨论】:

    标签: mongodb smalltalk pharo


    【解决方案1】:

    如果您有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 上实际测试它。

    【讨论】:

    • 再次感谢您的详尽回答。他们真的很有帮助。我曾经是一名 Oracle DBA,除了关系数据库之外,从未使用过其他任何东西。真的很好奇 - 但也有点怀疑 - 尝试一下!
    • @HenrikGuschov 欢迎您。我注意到我白天太快了,代码看起来很糟糕而且有问题。我希望我已经解决了这个问题。如果你想要一个 Smalltalk 数据库,你应该看看 GemStone,它是高质量的数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多