Yes but I would like to take the opportunity to have literal object syntax.

Stef


> and that is one reason why a special syntax for dictionaries would be welcome 
> :) 
> 
> On Jul 9, 2013, at 11:42 AM, Bernat Romagosa <tibabenfortlapala...@gmail.com> 
> wrote:
> 
>> 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.
> 

Reply via email to