The way I have figured out for now to run where with OrWhere queries is running multiple queries.
lets say I want to find users who are active (status = 1) or who have joined but not active yet(status = 2) (assume there could be multiple possible values for status based on conditions)
let activeusers = users.all().where(.status == 1).toArray() //get active users
let newjoinees = users.all().where(.status == 2).toArray() //get new joinees
let allusers = activeusers.concat(newjoinees); //all active users or new joinees
let distinctusers = allusers.distinct() //get only distinct users if there are duplicates.
So I would like to know how to do the same operation in single query like in SQL.
let allusers = users.all().where(.status == 1).Orwhere(.status == 2).toArray()
Also I could not find anything that can work like whereIn() as in SQL. any examples please.
Thanks
Ankit
Sets have a concat
method. See our documentation here:
let activeusers = users.all().where(.status == 1) //get active users
let newjoinees = users.all().where(.status == 2) //get new joinees
activeusers.concat(newjoinees)
Will it be useful to you?
let allusers = users.all().where(.status == 1 || .status == 2);
Also, it is possible to search by different fields
let allusers = users.all().where(.status == 1 || .anything == 'something');
One more thing, you can use a more verbose syntax if you’d like
let allusers = users.all().where((user) => user.status == 1 || user.status == 2);
1 Like
@sumerokr’s response is indeed probably better if you are filtering with where
.
I was probably thinking too hard about indexes . A check for equality like .where(.status == 1)
is a good example of something that should be indexed. Use concat
if you are combining multiple index reads. You should probably just use logical OR (||
) like @sumerokr says for filtering with where
// FSL
collection users {
history_days 0
// define an index on the users Collection
index by_status {
terms [.status]
}
}
// combine multiple index reads
let activeusers = users.by_status(1) //get active users
let newjoinees = users.by_status(2) //get new joinees
activeusers.concat(newjoinees)
// or all in one line
users.by_status(1).concat(users.by_status(2))