mirror of
https://github.com/hcengineering/platform.git
synced 2025-06-02 13:52:40 +00:00
UBERF-6014: Fix $faset usage (#4971)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
086c96a63c
commit
e3373f9278
@ -124,7 +124,8 @@ export class InboxNotificationsClientImpl implements InboxNotificationsClient {
|
|||||||
},
|
},
|
||||||
lookup: {
|
lookup: {
|
||||||
attachedTo: activity.class.ActivityMessage
|
attachedTo: activity.class.ActivityMessage
|
||||||
}
|
},
|
||||||
|
limit: 1000
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -430,7 +430,7 @@ abstract class MongoAdapterBase implements DbAdapter {
|
|||||||
domain?: Domain // Allow to find for Doc's in specified domain only.
|
domain?: Domain // Allow to find for Doc's in specified domain only.
|
||||||
}
|
}
|
||||||
): Promise<FindResult<T>> {
|
): Promise<FindResult<T>> {
|
||||||
const pipeline = []
|
const pipeline: any[] = []
|
||||||
const match = { $match: this.translateQuery(clazz, query) }
|
const match = { $match: this.translateQuery(clazz, query) }
|
||||||
const slowPipeline = isLookupQuery(query) || isLookupSort(options?.sort)
|
const slowPipeline = isLookupQuery(query) || isLookupSort(options?.sort)
|
||||||
const steps = await this.getLookups(clazz, options?.lookup)
|
const steps = await this.getLookups(clazz, options?.lookup)
|
||||||
@ -440,14 +440,14 @@ abstract class MongoAdapterBase implements DbAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
pipeline.push(match)
|
pipeline.push(match)
|
||||||
const resultPipeline: any[] = []
|
const totalPipeline: any[] = [...pipeline]
|
||||||
await this.fillSortPipeline(clazz, options, pipeline)
|
await this.fillSortPipeline(clazz, options, pipeline)
|
||||||
if (options?.limit !== undefined || typeof query._id === 'string') {
|
if (options?.limit !== undefined || typeof query._id === 'string') {
|
||||||
resultPipeline.push({ $limit: options?.limit ?? 1 })
|
pipeline.push({ $limit: options?.limit ?? 1 })
|
||||||
}
|
}
|
||||||
if (!slowPipeline) {
|
if (!slowPipeline) {
|
||||||
for (const step of steps) {
|
for (const step of steps) {
|
||||||
resultPipeline.push({ $lookup: step })
|
pipeline.push({ $lookup: step })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (options?.projection !== undefined) {
|
if (options?.projection !== undefined) {
|
||||||
@ -456,33 +456,24 @@ abstract class MongoAdapterBase implements DbAdapter {
|
|||||||
const ckey = this.checkMixinKey<T>(key, clazz) as keyof T
|
const ckey = this.checkMixinKey<T>(key, clazz) as keyof T
|
||||||
projection[ckey] = options.projection[key]
|
projection[ckey] = options.projection[key]
|
||||||
}
|
}
|
||||||
resultPipeline.push({ $project: projection })
|
pipeline.push({ $project: projection })
|
||||||
} else {
|
} else {
|
||||||
resultPipeline.push({ $project: { '%hash%': 0 } })
|
pipeline.push({ $project: { '%hash%': 0 } })
|
||||||
}
|
}
|
||||||
pipeline.push({
|
|
||||||
$facet: {
|
|
||||||
results: resultPipeline,
|
|
||||||
...(options?.total === true ? { totalCount: [{ $count: 'count' }] } : {})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// const domain = this.hierarchy.getDomain(clazz)
|
// const domain = this.hierarchy.getDomain(clazz)
|
||||||
const domain = options?.domain ?? this.hierarchy.getDomain(clazz)
|
const domain = options?.domain ?? this.hierarchy.getDomain(clazz)
|
||||||
const cursor = this.db.collection(domain).aggregate(pipeline, {
|
const cursor = this.db.collection(domain).aggregate(pipeline, {
|
||||||
checkKeys: false,
|
checkKeys: false,
|
||||||
enableUtf8Validation: false
|
enableUtf8Validation: false
|
||||||
})
|
})
|
||||||
const result: WithLookup<T>[] = []
|
let result: WithLookup<T>[] = []
|
||||||
let total = options?.total === true ? 0 : -1
|
let total = options?.total === true ? 0 : -1
|
||||||
try {
|
try {
|
||||||
const rres = await ctx.with('toArray', {}, async (ctx) => await this.toArray(cursor), {
|
result = (await ctx.with('toArray', {}, async (ctx) => await this.toArray(cursor), {
|
||||||
domain,
|
domain,
|
||||||
pipeline
|
pipeline
|
||||||
})
|
})) as any[]
|
||||||
for (const r of rres) {
|
|
||||||
result.push(...r.results)
|
|
||||||
total = options?.total === true ? r.totalCount?.shift()?.count ?? 0 : -1
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('error during executing cursor in findWithPipeline', clazz, cutObjectArray(query), options, e)
|
console.error('error during executing cursor in findWithPipeline', clazz, cutObjectArray(query), options, e)
|
||||||
throw e
|
throw e
|
||||||
@ -493,6 +484,15 @@ abstract class MongoAdapterBase implements DbAdapter {
|
|||||||
})
|
})
|
||||||
this.clearExtraLookups(row)
|
this.clearExtraLookups(row)
|
||||||
}
|
}
|
||||||
|
if (options?.total === true) {
|
||||||
|
totalPipeline.push({ $count: 'total' })
|
||||||
|
const totalCursor = this.db.collection(domain).aggregate(totalPipeline, {
|
||||||
|
checkKeys: false,
|
||||||
|
enableUtf8Validation: false
|
||||||
|
})
|
||||||
|
const arr = await this.toArray(totalCursor)
|
||||||
|
total = arr?.[0]?.total ?? 0
|
||||||
|
}
|
||||||
return toFindResult(this.stripHash(result), total)
|
return toFindResult(this.stripHash(result), total)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user