Hi CouchBase Gurus,
Need some help with N1QL Queries I’m a bit confuse with my query.
How do I JOIN documents as well as I can use COUNT() aggregate function and will be able to use ORDER BY
Here is my user documents:
[ { "id": "user::032", "email": "e.bandido@gmail.com", "firstName": "Edward", "lastName": "Bandido", "type": "user" }, { "id": "user::033", "email": "r.stew@gmail.com", "firstName": "Randy", "lastName": "Stew", "type": "user" }, { "id": "user::043", "email": "r.stew@gmail.com", "firstName": "Eddie", "lastName": "Gordon", "type": "user" } ]
Here is my task documents:
[ { "assignedTo": "user::032", "status": "pending", "name": "Show and Tell" "type": "task", }, { "assignedTo": "user::033", "status": "pending", "name": "Show and Tell" "type": "task", }, { "assignedTo": "user::043", "status": "pending", "name": "Show and Tell" "type": "task", }, { "assignedTo": "user::033", "status": "pending", "name": "Painting Session" "type": "task", }, ]
My goal here is to count the number of pending tasks that the users have. Also, I can ORDER BY lastName and totalPendingTask.
Here is my expected result:
[ { "id": "user::032", "email": "e.bandido@gmail.com", "firstName": "Edward", "lastName": "Bandido", "type": "user" "totalPendingTask": 1 }, { "id": "user::033", "email": "r.stew@gmail.com", "firstName": "Randy", "lastName": "Stew", "type": "user", "totalPendingTask": 2 }, { "id": "user::043", "email": "r.stew@gmail.com", "firstName": "Eddie", "lastName": "Gordon", "type": "user", "totalPendingTask": 1 } ]
Here the query I created initially but it doesn’t work
SELECT META(`users`).id, `users`.firstName, `users`.lastName, `users`.email, COUNT(`task`.totalPendingTask) AS totalPendingTask FROM `bucket` AS `users` LEFT JOIN `bucket` AS `tasks` ON META(`users`).id = `tasks`.assignedTo AND `tasks`.`type` = 'task' AND `tasks`.tenant = 'tenant::tenant01' AND `tasks`.status = 'pending' WHERE `users`.`type`='user' AND `users`.tenant='tenant::tenant01' AND (ANY territory IN `users`.territories SATISFIES territory IN ["tenant::tenant01::territory::0029"] END) AND (ANY userRole IN `users`.roles SATISFIES userRole = 'role::sales representatives' END) ORDER BY LOWER(`users`.lastName) ASC
Need your help guys thanks.