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