Hello Everyone! Today we have a question from Franck. He’s asking why he cannot do query with a specific select clause like this :

Administrator@127.0.0.1:/> query "select dc:title from myDocumentType" Administrator@127.0.0.1:/>` 

while this is working fine:

Administrator@127.0.0.1:/> query "select * from myDocumentType" /default-domain/workspaces/Library/sections/North America 

Frank is actually running those queries from Nuxeo Shell. The query command uses the Document.Query operation which itself uses CoreSession#query “CoreSession JavaDoc”). This method will only return a DocumentModelList so you cannot use a specific select clause in your query. And this makes sense, because with Content Automation, you usually manipulate Documents.

So when can you use a specific select clause? You have to use CoreSession#queryAndFetch. This will return an IterableQueryResult. If you still want to do your query from the shell, a quick and easy way to do it is to use a Groovy script like this:

[groovy] iterableQueryResult = Session.queryAndFetch(“SELECT dc:title,ecm:uuid FROM Document WHERE dc:title = ‘Workspace’”, “NXQL”); out = “”; while(iterableQueryResult.hasNext()){ out += iterableQueryResult.next().toString() + “n”; } // don’t forget to close it! iterableQueryResult.close(); return out; [/groovy]

To call it you have to use the script command and give it the path of your Groovy script:

Administrator@localhost:/> script /home/ldoguin/test.groovy {ecm:uuid=168458db-47fc-4c34-be50-bdc6f4dbcb56, dc:title=Workspace} 

If you want to know more about Nuxeo’s NXQL, take a look at the documentation.

Cheers!