improve query performance

This commit is contained in:
2025-01-21 14:31:28 +05:30
parent a54541518c
commit 59ce61d3a6
3 changed files with 86 additions and 22 deletions

View File

@@ -22,9 +22,9 @@ export async function getPermit(permitId: string, tenantId: string) {
.findOne({
$and: [{ tenantId: tenantId }, { pid: permitId }],
})
.populate("county")
.populate("client")
.populate("assignedTo");
.populate({ path: "county", select: "pid name avatar" })
.populate({ path: "client", select: "pid name avatar" })
.populate({ path: "assignedTo", select: "pid name avatar" });
}
export async function listPermits(params: PageQueryParams, tenantId: string) {
@@ -55,7 +55,7 @@ export async function listPermits(params: PageQueryParams, tenantId: string) {
},
{
$lookup: {
from: "permits",
from: "users",
localField: "assignedTo",
foreignField: "_id",
as: "assignedRec",
@@ -63,15 +63,47 @@ export async function listPermits(params: PageQueryParams, tenantId: string) {
},
{
$project: {
_id: 0,
_id: 1,
pid: 1,
permitNumber: 1,
county: { $arrayElemAt: ["$countyRec", 0] },
client: { $arrayElemAt: ["$clientRec", 0] },
permitDate: 1,
stage: 1,
status: 1,
assignedTo: { $arrayElemAt: ["$assignedRec", 0] },
county: {
$let: {
vars: { county: { $arrayElemAt: ["$countyRec", 0] } },
in: {
_id: "$$county._id",
pid: "$$county.pid",
name: "$$county.name",
type: "$$county.type",
avatar: "$$county.avatar",
},
},
},
client: {
$let: {
vars: { client: { $arrayElemAt: ["$clientRec", 0] } },
in: {
_id: "$$client._id",
pid: "$$client.pid",
name: "$$client.name",
type: "$$client.type",
avatar: "$$client.avatar",
},
},
},
assignedTo: {
$let: {
vars: { assigned: { $arrayElemAt: ["$assignedRec", 0] } },
in: {
_id: "$$assigned._id",
pid: "$$assigned.pid",
name: "$$assigned.name",
avatar: "$$assigned.avatar",
},
},
},
},
},
{
@@ -112,9 +144,9 @@ export async function updatePermit(
{ ...input, updatedAt: new Date() },
{ new: true }
)
.populate("county")
.populate("client")
.populate("assignedTo");
.populate({ path: "county", select: "pid name avatar" })
.populate({ path: "client", select: "pid name avatar" })
.populate({ path: "assignedTo", select: "pid name avatar" });
return updatePermitResult;
}