query()
Engine Compatibility
The query()
operator is not supported by the new pico engine.
The query()
operator can be used to search structured persistent variables. The syntax is
<persistent variable>.query(<hash path>, { 'requires' : <join operator>, 'conditions : [ { 'search_key' : <path_to_field>, 'operator' : <mongo $ comparison op>, 'value' : <value> }, ... ] },| <extended result> );
<hash path>
will be the empty array, []
, if the key is at root.
search_key
is the path from the <hash path>
to the field that you want to compare. If that path does not exist for an entry, it will not be considered even as a null
For example to do a twitter timeline search where the entries have been assigned a unique key to transform the array into a hash:
ent:tweets.query([],{ 'requires' : '$and', 'conditions' : [ { 'search_key' : ['retweeted_status', 'favorite_count'], 'operator' : '$gt', 'value' : 5 }, { 'search_key' : ['retweeted_status', 'favorite_count'], 'operator' : '$lt', 'value' : 200 } ]})
This will return an array of <hash paths> (array of arrays) that is essentially an array of the keys to the matching values
[ [ 'a32' ], [ 'a31' ], [ 'a30' ] ]
You can then use the values to get the entire element with ent:tweets
{[ 'a32' ]}.
if the third argument to query()
is not null, the actual result, rather than a path to it will be returned.
The following function from Fuse uses query()
to return trips by their end date, given a start and end date.
trips = function(start, end){ utc_start = common:convertToUTC(start); utc_end = common:convertToUTC(end); ent:trip_summaries.query([], { 'requires' : '$and', 'conditions' : [ { 'search_key' : [ 'endWaypoint', 'timestamp'], 'operator' : '$gte', 'value' : utc_start }, { 'search_key' : [ 'endWaypoint', 'timestamp' ], 'operator' : '$lte', 'value' : utc_end } ]}, "return_values" ) };
Note that KRL stores data in persistent variables in a "flat format" and therefore, all comparisons are string or numeric comparisons. The query() operator doesn't know about dateTime and other special formats for values.
Copyright Picolabs | Licensed under Creative Commons.