Rethinkdb: how to call getAll with array of predefined ids - rethinkdb

Have some ids:
let uIds = ['2e56c685-977b-41df-95dd-6adab3aef009',
'dc636c8c-46b8-4022-bea8-a17e692e75ce'
];
How to get all records with these ids?
This doesn't work:
r.db('test').table('users').getAll(uIds)
And this too:
r.db('test').table('users').getAll.apply(this, uIds)
And even this:
r.db('test').table('users').getAll(r.expr(uIds))

You can use r.args to splice arguments:
.getAll(r.args(uIds))
If those arguments are known when building the query, you can also use apply , but it must be called with the proper this argument:
var table = r.table('users');
table.getAll.apply(table, uIds)

Related

CloudSearch or CloudQuery to search by 'contains' in CloudBoost

I need to filter data by substring, I mean, if I have got this data:
'John','Markus','james'
And i want to look by all elements which contains 'm' it should return:
'Markus','james'
Or if I filter by 'hn', the results should be:
'John'
How can I do it using CloudSearch or CloudQuery?
EDIT: I have seen wildcard method which seems to fit with my requirements, except for only is allowed a column (string) param. I would need to filter also by columns (array). As in searchOn method.
This should work I think. did you try it with this :
var query = new CB.CloudQuery('TableName');
//then you can:
query.substring('ColName','Text');
//or
query.substring(['ColName1','ColName2'],'Text');
//or
query.substring('ColName',['Text1', 'Text2']);
//or
query.substring(['ColName1','ColName2'],['Text1', 'Text2']);
query.find(callback);

Write query which run on array by considring sub query in Parse

I need to write a query in such way that the array(collection) is contain only sub query objects.
Suppose we have the two tables as follows:
TableA:
objectId, name
TableB:
objectId, names[array of name: parse pointer collection]
Here is my code which I tried:
// sub query
var subQuery = new Parse.Query('TableA');
subQuery.doesNotExist('name');
// main query
var query = new Parse.Query('TableB');
query.exists("names");
//query.containsAll("names", subQuery); // this means names should contain all subQuery, so this is not use full for me.
query.matchesQuery("names", subQuery);
This code is running fine, but this is not working as I want and also not showing the any error.
It seems that you don't need a subquery per se, but rather to first query your list of names, and then use that in your main query. What you seem to be looking for is: containedIn( key, values ) , as in:
query.containedIn("name", namesFromFirstQuery)

Groovy Sql rows

Hello I am trying to get rows using Groovy Sql connection but it returns me records as a List inside a List. The following:
Sql sql = new Sql(dataSource)
List<GroovyRowResult> row = sql.rows('select * from user where username=:userName and password=:password, [userName:'groovy',password:'123'])
returns the result as [[return record as map]]
Any one help me to figure out why the result is a List inside a List. How will I get it as a single level List using the rows method?
Your results are coming back as a list of maps, not a list of lists. Look at the ':' and ',' chars in the inner part. You can use standard groovy extraction of values from these.
In your case, it looks like you're using a primary key search, so will only return one result, so use firstRow in this case, so that you don't have to extract the single map result from the list.
See the documentation for the groovy Sql class for examples.
In the more general case where you are returning multiple rows, then your data probably looks like this:
[[username:"foo", password:"foopass"], [username:"bar", password:"barpass"]]
Assuming the line:
def results = sql.rows('select * from user')
You can then do things like spread operators:
assert results.username == ["foo", "bar"]
assert results.password == ["foopass", "barpass"]
or iterate over the results
results.each { println it.username }
==> foo
==> bar
or use any of the many Collection functions
println results.collect { "${it.username} -> ${it.password}" }
==> [ "foo -> foopass", "bar -> barpass" ]
I think your main issue was not recognising a single map entry in a list.
It doesn't return a List inside a List, it returns a List of Map with each map containing the columns selected from your select.
So if you want all of the usernames selected (as a List), you can just do:
def usernames = row.username
If you just want a single row, you can do:
GroovyRowResult row = sql.firstRow('select * from user where username=:userName and password=:password, [userName:'groovy',password:'123'])
And then this will effectively just be a map with each key being the field name selected, and each value being the value of the first row of each field

Laravel Queries: 'lists' method

The 'lists' method surely does retrieve a list of column's values, but I want the method to retrieve the values but without duplication, how to achieve that?
$types = DB::table('events')->lists('type');
If you need to get just distinct values, you should do:
$types = DB::table('lists')->distinct()->lists('type');

How to use 'IN (1,2,3)' with findAll?

I need to get a couple of Students from the database, and I have their primary keys in a comma-separated string.
Normally using SQL it would be something like:
$cleanedStudentIdStringList = "1,2,3,4";
SELECT * FROM Student WHERE id IN ($cleanedStudentIdStringList)
Yii's ActiveRecord seems to insert a single quote around bound parameters in the resulting SQL statement which cause the query to fail when using parameter binding.
This works, but doesn't use safe parameter binding.
$students = Student::model()->findAll("id IN ({$_POST['studentIds']})");
Is there a way to still use parameter binding and get only a couple of rows in a single query?
You can do it also that way:
$criteria = new CDbCriteria();
$criteria->addInCondition("id", array(1,2,3,4));
$result = Student::model()->findAll($criteria);
and use in array any values you need.
Aleksy
You can use findAllByAttributes method also:
$a=array(1,2,3,4);
$model = Student::model()->findAllByAttributes(array("id"=>$a));

Resources