Я пытаюсь создать класс-оболочку для запроса mongoose, который позволяет мне использовать запрос более функциональным образом. Всякий раз, когда пользователь добавляет к этому запросу предложение типа 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 и тому подобное, и применять их только в конце, но это также не кажется мне вполне правильным.
Кто-нибудь имеет другую идею и может указать мне правильное направление?
Спасибо