Hi,
I am currently trying to query all of my documents to get a list of Distinct values for a specific field. They will then be displayed in a Combo box for sorting in the future. The Query "SELECT DISTINCT license_type FROM LiquorLocator" works fine as expected when executed on the database panel. When converted to Spring Boot
@Query(“SELECT DISTINCT license_type, META(b).id as _ID, META(b).cas as _CAS FROM #{#n1ql ucket} as b”)
It is returning every documents value. I am guessing that this is due the the fact that it’s looking for all distinct combinations of those three values?
Is there a way around this or is my best bet making a new document that holds all the possible distinct values for license_type?
CREATE INDEX ix1 ON LiquorLocator(license_type);
SELECT ARRAY_AGG(DISTINCT license_type) AS license_types, 0 AS _ID, 1 AS _CAS
FROM LiquorLocator
WHERE license_type IS NOT NULL;
@Query("SELECT DISTINCT license_type, 0 AS _ID, 1 AS _CAS FROM #{#n1ql.bucket} WHERE license_type IS NOT NULL")
List<EstablishmentType> findAllEstablishmentTypes();
Appears to be giving me a
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String @vsr1
EDIT: Discovered that _ID is suppose to be a string, now it appears I’am getting this error:
org.springframework.data.mapping.model.MappingInstantiationException: Failed to instantiate com.liqourlocator.Liquor.Locator.model.EstablishmentType using constructor public com.liqourlocator.Liquor.Locator.model.EstablishmentType(java.lang.String,int,java.lang.String) with arguments null,null,Beverage Room
EDITEDIT: I have fixed the issue by removing the null values from the constructor.
CREATE INDEX ix1 ON LiquorLocator(license_type, META().cas);
SELECT mx.license_type, mx.id AS _ID, mx.cas AS _CAS
FROM LiquorLocator AS l
WHERE l.license_type IS NOT NULL
GROUP BY l.license_type
LETTING mx = MAX([l.license_type, {l.license_type, META(l).id, META(l).cas}])[1];