我试图围绕猫鼬查询创建一个包装器类,从而使我能够以更实用的方式使用该查询。每当用户向该查询添加where
或limit
之类的子句时,我都希望该类克隆自身,然后将新子句应用于克隆的对象。这样,我就可以使用唯一查询和新查询,而旧查询则是可靠的,因为它永远不会更改。
到目前为止,我找不到任何支持该解决方案的解决方案。
class BaseMongoQuery<T> {
constructor(private readonly query: mongoose.DocumentQuery<ReadonlyArray<T>, T & Document, {}> {}
where(parameters: ParameterType<T>) {
const newQuery = this.cloneMyQuery()
newQuery.find(parameters)
return new BaseMongoQuery(newQuery)
}
private cloneMyQuery() {
// return clone of this.query
// This is what I am looking for
}
getResults() {
return this.query.exec()
}
}
我知道我可以用不同的方式写它,并记住所有where子句和限制等,并且只在最后应用它们,但这对我来说似乎并不正确。
有人有不同的想法,可以指出正确的方向吗?
谢谢