your query is almost fine: 
the unique problem is with the argument for the $or expression, which should 
not be another dictionary but a collection: 

        { 
                '$or' -> (Array 
                        with: 'profile.firstName' -> { '$regex' -> '^.*na.*'. 
'$options' -> 'i'} asDictionary
                        with: 'profile.surname' -> { '$regex' -> '^.*ve.*'. 
'$options' -> 'i'} asDictionary)
        } asDictionary.

On Jul 8, 2013, at 2:16 PM, Bernat Romagosa <tibabenfortlapala...@gmail.com> 
wrote:

> Thanks! The reference thing is exactly what I needed :)
> 
> However, I'm not managing very well with the $or query... how would one add a 
> regex in there?
> 
> I've tried:
> 
> User selectMany: 
>       { 
>               '$or' -> 
>                       {
>                               'profile.firstName' -> { '$regex' -> '^.*na.*'. 
> '$options' -> 'i'} asDictionary.
>                               'profile.surname' -> { '$regex' -> '^.*ve.*'. 
> '$options' -> 'i'} asDictionary.
>                       } asDictionary
>       } asDictionary.
> 
> But it's obviously wrong... :(
> 
> 
> 2013/7/8 Esteban Lorenzano <esteba...@gmail.com>
> Hi,
> 
> something like this:
> 
> {
>       '$or'-> { 
>               { $field1 -> value1 } asDictionary. "expression 1"
>               { $field2 -> value2 } asDictionary. "expression 2"
>               ...
>               { $fieldN -> valueN } asDictionary. "expression N"
>       }
> } asDictionary
> 
> cheers, 
> Esteban
> 
> On Jul 8, 2013, at 12:16 PM, Bernat Romagosa <tibabenfortlapala...@gmail.com> 
> wrote:
> 
>> 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.

Reply via email to