I’m trying to create a Mongo query on a nested attribute of the doc, in the javascript Mongo shell it would be:
db.users.find({"services.facebook.email": "some@example.com"})
How I could execute that query using a query of MongoTalk?
You can query using a “regular” Mongo Query (a.k.a. JSON/Dictionary query) or using MongoQuery using Block Syntax:
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' ].
In Voyage, you have to do something like this:
Users selectMany: [ :each | (each at: 'services.facebook.email') = 'some@example.com' ]
Since this is MongoQueries, if you are using directly MongoTalk (without Voyage), you can execute the same query in your MongoCollection.