Just in case someone runs into the same problem, the $or query should be written as follows:
User selectMany: { '$or' -> (Array with: { 'profile.firstName' -> { '$regex' -> '^.*na.*'. '$options' -> 'i' } *asDictionary *} *asDictionary* with: { 'profile.surname' -> { '$regex' -> '^.*ve.*'. '$options' -> 'i' } * asDictionary *} *asDictionary*) } *asDictionary*. With so many dictionaries it's really easy to miss one! :) Thanks a lot, I've got everything working now! 2013/7/8 Stéphane Ducasse <stephane.duca...@inria.fr> > estebanS > could you do me one favor: > build a kind of list of questions and answers > > so that I can add that to the voyage chapter? > Else I will do it but … > > Stef > > > On Jul 8, 2013, at 2:38 PM, Esteban A. Maringolo <emaring...@gmail.com> > wrote: > > > But, as far as I know, Mongo will create an _id key with an Mongo OID > > for every document that doesn't have one. > > You can use _id without having to use an OID, you can use plain > > strings or integers. > > > > So I guess it is safe to use _id. I'll change it in my tests and then > > let you know. > > > > :) > > Esteban A. Maringolo > > > > > > 2013/7/8 Esteban Lorenzano <esteba...@gmail.com>: > >> Because _id is internally used by mongo and I didn't wanted to risk any > collision :) > >> > >> On Jul 8, 2013, at 2:26 PM, "Esteban A. Maringolo" < > emaring...@gmail.com> wrote: > >> > >>> Esteban, > >>> > >>> Why do you use __id: (double underscore) instead of the _id (single > >>> underscore) key? > >>> > >>> Regards, > >>> Esteban A. Maringolo > >>> > >>> > >>> 2013/7/8 Esteban Lorenzano <esteba...@gmail.com>: > >>>> Hi again, > >>>> > >>>> sadly, there is no direct support for referenced queries yet. > >>>> > >>>> however, you can workaround the problem by doing: > >>>> > >>>> > >>>> { > >>>> 'referenceField.__id' -> (VORepository current keyOf: referenceObject) > >>>> } asDictionary. > >>>> > >>>> or with MongoQueries: > >>>> > >>>> [ :each | (each at: 'referenceField.__id') = (VORepository current > keyOf: > >>>> referenceObject) ] > >>>> > >>>> Some internal info: > >>>> in Voyage, all references are kept in mongo as sub-documents with this > >>>> structure: > >>>> > >>>> { > >>>> '__id': OID(1234567890). > >>>> '#collection': 'theNameOfTheCollection'. > >>>> } > >>>> > >>>> so, you always can construct queries knowing that :) > >>>> > >>>> Esteban > >>>> > >>>> On Jul 8, 2013, at 12:58 PM, Bernat Romagosa > >>>> <tibabenfortlapala...@gmail.com> wrote: > >>>> > >>>> Also, how does one query a referenced object? > >>>> > >>>> MyClass selectMany: { 'project.name' -> 'Test' } asDictionary. "<-- > Works > >>>> only if project is an embedded object, but it doesn't if it's a > reference." > >>>> > >>>> > >>>> 2013/7/8 Bernat Romagosa <tibabenfortlapala...@gmail.com> > >>>>> > >>>>> Sorry for being lazy, but how does one use logical operators in > dictionary > >>>>> queries? > >>>>> > >>>>> I'm trying something like: > >>>>> > >>>>> (User selectMany: { 'profile.firstName' -> { '$regex' -> '^.*na.*'. > >>>>> '$options' -> 'i'} asDictionary } asDictionary). > >>>>> > >>>>> And I'd like to $or this with: > >>>>> > >>>>> 'profile.surname' -> { '$regex' -> '^.*ve.*'. '$options' -> 'i'} > >>>>> asDictionary. > >>>>> > >>>>> > >>>>> 2013/7/6 Stéphane Ducasse <stephane.duca...@inria.fr> > >>>>>> > >>>>>> > >>>>>> On Jul 6, 2013, at 11:16 AM, Esteban Lorenzano <esteba...@gmail.com > > > >>>>>> wrote: > >>>>>> > >>>>>>> sure :) > >>>>>>> > >>>>>>> I will add a blog post on "voyage advanced queries" too :) > >>>>>> > >>>>>> too if you want but we could also focus on the chapter because we > can be > >>>>>> multiple people to edit it > >>>>>> while your blog you are alone. > >>>>>> > >>>>>> Stef > >>>>>> > >>>>>>> > >>>>>>> Esteban > >>>>>>> > >>>>>>> On Jul 6, 2013, at 10:52 AM, Stéphane Ducasse > >>>>>>> <stephane.duca...@inria.fr> wrote: > >>>>>>> > >>>>>>>> esteban could you take some time to add this information to the > Voyage > >>>>>>>> chapter? > >>>>>>>> > >>>>>>>> > https://ci.inria.fr/pharo-contribution/job/PharoForTheEnterprise/ > >>>>>>>> > >>>>>>>> add the information in any format and I can make it run. > >>>>>>>> > >>>>>>>> > >>>>>>>> > https://github.com/SquareBracketAssociates/PharoForTheEnterprise-english > >>>>>>>> > >>>>>>>> Stef > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On Jul 4, 2013, at 7:49 PM, Esteban Lorenzano < > esteba...@gmail.com> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> you have different constructions: > >>>>>>>>> > >>>>>>>>> { $gt: { "number_field": 42 } } > >>>>>>>>> > >>>>>>>>> and so on... always with dictionaries (bah, json structs). > >>>>>>>>> > >>>>>>>>> as a query language it kinda sucks... but well... is how it is :) > >>>>>>>>> > >>>>>>>>> On Jul 4, 2013, at 7:34 PM, Stéphane Ducasse > >>>>>>>>> <stephane.duca...@inria.fr> wrote: > >>>>>>>>> > >>>>>>>>>> Ok but how do I map conceptual a query to a dictionary > >>>>>>>>>> > >>>>>>>>>> Do I guess right that there is an exact match > >>>>>>>>>> > >>>>>>>>>> selectOne: { id -> 10} asDictionary > >>>>>>>>>> > >>>>>>>>>> will match id = 10 > >>>>>>>>>> > >>>>>>>>>> Now we can only do exact mathc? > >>>>>>>>>> > >>>>>>>>>> name matches: 'stef*' > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> On Jul 4, 2013, at 6:04 PM, Esteban A. Maringolo > >>>>>>>>>> <emaring...@gmail.com> wrote: > >>>>>>>>>> > >>>>>>>>>>> Stef, > >>>>>>>>>>> > >>>>>>>>>>> You're asking the other Esteban, but having used Voyage and > Mongo I > >>>>>>>>>>> think I can answer this. > >>>>>>>>>>> > >>>>>>>>>>> Mongo receives a JSON object to do all the query filtering. > For a > >>>>>>>>>>> simple lookup it is has a simple structre, as the query gets > more > >>>>>>>>>>> complex it gets esoteric as well (with "special" MongoDB keys > in > >>>>>>>>>>> the > >>>>>>>>>>> format of "$key"). > >>>>>>>>>>> > >>>>>>>>>>> Because the simplest map we have to a JSON Object is the > >>>>>>>>>>> Dictionary, I > >>>>>>>>>>> guess that's why it ends up being converted to a Dictionary, > which > >>>>>>>>>>> in > >>>>>>>>>>> turn gets converted to JSON and/or BSON. > >>>>>>>>>>> > >>>>>>>>>>> Regards, > >>>>>>>>>>> > >>>>>>>>>>> Esteban A. Maringolo > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> 2013/7/4 Stéphane Ducasse <stephane.duca...@inria.fr>: > >>>>>>>>>>>> > >>>>>>>>>>>> On Jul 4, 2013, at 2:58 PM, Esteban Lorenzano > >>>>>>>>>>>> <esteba...@gmail.com> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>> Hi :) > >>>>>>>>>>>> > >>>>>>>>>>>> can you check if you have the "MongoQueries" package > installed? > >>>>>>>>>>>> > >>>>>>>>>>>> cheers, > >>>>>>>>>>>> Esteban > >>>>>>>>>>>> > >>>>>>>>>>>> ps: please notice that in anycase you will not be able to > execute > >>>>>>>>>>>> > >>>>>>>>>>>> [ :each | each name first = $X ] > >>>>>>>>>>>> > >>>>>>>>>>>> because the MongoQueries package just translates the block > into a > >>>>>>>>>>>> mongo-query which is a dictionary (a JSON expression). But you > >>>>>>>>>>>> will found > >>>>>>>>>>>> some ways to help you, some special keywords like #in: and > #where: > >>>>>>>>>>>> (you can > >>>>>>>>>>>> see how they work in the tests) > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> esteban > >>>>>>>>>>>> how a dictionary is used to work as a block for a query? > >>>>>>>>>>>> Can you explain because I would have thought that the first > line > >>>>>>>>>>>> did not > >>>>>>>>>>>> work and the second would work. > >>>>>>>>>>>> > >>>>>>>>>>>> Stef > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> On Jul 4, 2013, at 2:17 PM, Bernat Romagosa > >>>>>>>>>>>> <tibabenfortlapala...@gmail.com> > >>>>>>>>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>> Hi! > >>>>>>>>>>>> > >>>>>>>>>>>> I realize probably only Esteban will be able to answer, but I > >>>>>>>>>>>> prefer to > >>>>>>>>>>>> write to the list so the mail is logged and other people can > >>>>>>>>>>>> benefit from > >>>>>>>>>>>> it. > >>>>>>>>>>>> > >>>>>>>>>>>> I'm trying to use blocks as arguments for #selectOne: and > >>>>>>>>>>>> #selectMany:, but > >>>>>>>>>>>> it doesn't seem to work. Here's my code: > >>>>>>>>>>>> > >>>>>>>>>>>> MyClass selectOne: { #name -> 'Some name' } asDictionary. > >>>>>>>>>>>> MyClass selectOne: [ :each | each name = 'Some name' ]. > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> The first one works, but the second one raises a > >>>>>>>>>>>> VOMongoConnectionError. > >>>>>>>>>>>> > >>>>>>>>>>>> Also: > >>>>>>>>>>>> > >>>>>>>>>>>> MyClass selectMany: { #name -> 'Some name' } asDictionary. > >>>>>>>>>>>> MyClass selectMany: [ :each | each name = 'Some name' ]. > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> The first does work, the second one doesn't, which prevents me > >>>>>>>>>>>> from writing > >>>>>>>>>>>> more useful stuff like: > >>>>>>>>>>>> > >>>>>>>>>>>> MyClass selectMany: [ :each | each name first = $P ]. > >>>>>>>>>>>> > >>>>>>>>>>>> Any idea why this could be failing? I've the latest stable > version > >>>>>>>>>>>> loaded > >>>>>>>>>>>> via: > >>>>>>>>>>>> > >>>>>>>>>>>> Gofer it > >>>>>>>>>>>> url: 'http://smalltalkhub.com/mc/estebanlm/Voyage/main'; > >>>>>>>>>>>> package: 'ConfigurationOfVoyageMongo'; > >>>>>>>>>>>> load. > >>>>>>>>>>>> (Smalltalk at: #ConfigurationOfVoyageMongo) load. > >>>>>>>>>>>> > >>>>>>>>>>>> Thanks! :) > >>>>>>>>>>>> > >>>>>>>>>>>> Bernat. > >>>>>>>>>>>> > >>>>>>>>>>>> -- > >>>>>>>>>>>> Bernat Romagosa. > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> Bernat Romagosa. > >>>> > >>>> > >>>> > >>>> > >>>> -- > >>>> Bernat Romagosa. > >>>> > >>>> > >>> > >> > >> > > > > > -- Bernat Romagosa.