I am trying to run a Firestore query using LIKE
and OR
condition. I couldn't see any examples in the firestore docs too.
There was a section called Full-Text Search
which recommend a Algolia
Search.
Is there a way to achieve LIKE
and OR
condition in firestore query ?
Data Model
SQL Query
SELECT * FROM
Booking
WHERE awbNumber LIKE %searchText%
OR referenceNumber LIKE %searchText%
OR shipperName LIKE %searchText%
OR receiverName LIKE %searchText%
OR origin LIKE %searchText%
OR destination LIKE %searchText%
Firestore Query using Angular Fire Library
commented out the code which are tried and not worked.
let query = this.db.collection(doc).ref.orderBy('id', 'desc');
if (searchText) {
// query = query.(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('awbNumber').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('referenceNumber').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('additionalContacts').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('additionalLeaf').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('additionalWeights').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('deliveryOfficeAddress').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('destination').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('origin').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('receiverName').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('remarks').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.orderBy('shipperName').startAt(searchText).endAt(searchText + '\uf8ff');
// query = query.where('awbNumber == searchText');
// query = query.where('referenceNumber', '==', searchText);
// query = query.where('additionalContacts', '==', searchText);
// query = query.where('additionalLeaf', '==', searchText);
// query = query.where('additionalWeights', '==', searchText);
// query = query.where('deliveryOfficeAddress', '==', searchText);
// query = query.where('destination', '==', searchText);
// query = query.where('origin', '==', searchText);
// query = query.where('receiverName', '==', searchText);
// query = query.where('remarks', '==', searchText);
// query = query.where('shipperName', '==', searchText);
}
query = query.limit(limit);
return this.db.collection(doc, (ref) => query)
.snapshotChanges()
.pipe(
map((actions) => actions.map(a => {
const data = a.payload.doc.data() as any;
const id = a.payload.doc.id;
return { id, ...data, count };
}))
);
Is there any way to achieve the result that is mentioned in SQL query?