【问题标题】:How to query nested properties using MongoTalk on Pharo?如何在 Pharo 上使用 MongoTalk 查询嵌套属性?
【发布时间】:2017-01-22 20:45:31
【问题描述】:

我正在尝试在文档的嵌套属性上创建一个 Mongo 查询,在 javascript Mongo shell 中它会是:

db.users.find({"services.facebook.email": "some@example.com"})

如何使用 MongoTalk 的查询来执行该查询?

【问题讨论】:

    标签: mongodb mongodb-query pharo


    【解决方案1】:

    您可以使用“常规”Mongo 查询(也称为 JSON/字典查询)或使用 MongoQueryBlock 语法进行查询:

    mongo := Mongo default.
    db := mongo databaseNamed: 'test'.
    users := db getCollection: 'users'.
    
    user1 := { 'services' -> {
        'facebook' -> { 'email' -> 'some@example.com' } asDictionary
        }  asDictionary
    } asDictionary.
    
    users add: user1.
    
    "Query using dictionary"
    users select: {'services.facebook.email' -> 'some@example.com'} asDictionary.
    
    "Query using MongoQuery"
    users select: [ :each | (each at: 'services.facebook.email') = 'some@example.com' ].
    

    【讨论】:

    • 您也可以简单地使用users select: {'services.facebook.email' -> 'some@example.com'}。这可能是最接近原始 MongoShell 语法的。
    • 是的,我使用了这个建议,因为它是最简洁的一个。按照您的建议,这些对将 asMongoQueryasDictionary 连接起来
    【解决方案2】:

    在 Voyage 中,您必须执行以下操作:

    Users selectMany: [ :each | (each at: 'services.facebook.email') = 'some@example.com' ]
    

    由于这是 MongoQueries,如果您直接使用 MongoTalk(没有 Voyage),您可以在 MongoCollection 中执行相同的查询。

    【讨论】:

    • 太好了@EstebanLM 感谢您的快速回答!
    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-08-16
    • 2018-07-09
    • 2022-07-06
    • 2016-02-15
    相关资源
    最近更新 更多