> Am 04.01.2015 um 05:12 schrieb Yanni Chiu <[email protected]>:
> 
> 
> On Dec 30, 2014, at 7:14 AM, Norbert Hartl <[email protected]> wrote:
> 
>> 
>> In order to execute a javascript query you would need a javascript 
>> interpreter. As this is not feasible Mongo provides alternative constructs 
>> for the most important things you need. For the regex it would be
>> 
>> aMongoCollection select: { 
>>      'fieldName' -> { '$regex' -> '.*foo' } asDictionary 
>>      } asDictionary
> 
> What would be the equivalent of:
> 
> db.SomeCollection.find( {$or: [ { name: { $regex: /test/i } }, { description: 
> { $regex: /test/i } } ] } )
> 
> In other words, how would a query on multiple fields be done in MongoTalk?
> 
> The case-insensitive match can probably done with "$options:” (just tried it, 
> and it works).
> MyMongoClass selectMany: { 
>       'description' -> { '$regex' -> 'YADA'. '$options' -> 'i' } asDictionary 
>       } asDictionary.
> 
> 
Just as you wrote it. Using $regex and // is not necessary. Slash is the regex 
operator in javascript. As an alternative you use $regex and the search term in 
a string. 

/test/

becomes

{ '$regex' -> 'test' } asDictionary

Every { "key" : "value" } object in javascript you need to convert to { 'key' 
-> 'value' } asDictionary and every Array [ "val", "val" ] into  { 'val' . 
'val' }. And regex modifiers go into $options as you found out already. So the 
complete query would be like.

someCollection select: { 
        '$or' -> { 
                { 'name' -> { 
                        '$regex' -> 'test' . 
                        '$options' -> 'i' } asDictionary } asDictionary.
                { 'description' -> { 
                        '$regex' -> 'test' . 
                        '$options' -> 'i' } asDictionary } asDictionary
        } 
} asDictionary

Norbert

Reply via email to