如何在Pharo上使用MongoTalk查询嵌套属性?

时间:2017-01-22 20:45:32

标签: mongodb mongodb-query pharo

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

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

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

2 个答案:

答案 0 :(得分:4)

您可以使用“常规”Mongo查询(a.k.a. JSON / Dictionary查询)或MongoQuery使用Block语法进行查询语法:

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' ].

答案 1 :(得分:2)

在Voyage中,你必须做这样的事情:

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

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