2016-06-21 6 views
1

Я хочу сделать что-то подобное в Mongoose. Является ли это возможным?Mongoose Custom Query Builders

// defining schema: 
Product.queryBuilder.category = function(category) { 
    return this.find({category: category}); 
} 

Product.queryBuilder.available = function() { 
    return this.find({availableQuantity: {$gt: 0}}); 
} 

Product.queryBuilder.recent = function(count) { 
    return this.sort({updatedAt: -1}).limit(count); 
} 


// in controller: 
Product.query.category('men').available().recent(10).exec().then(...) 

ответ

0

НЕТ, это не сработает.

  1. Вам нужно решить, будете ли вы использовать методы экземпляра мангуста или статику. Если вы используете методы экземпляра, вы должны сначала извлечь документ из своего db. Когда вы это сделаете, вы можете вызвать любой метод экземпляра на нем. И, во всех методах экземпляра, вы будете иметь ссылку на this, который будет вашим документом.

  2. Однако, если вы хотите использовать старую старую гонку, у вас не будет ссылки на документ через this. Вместо этого вам сначала нужно будет сделать Model.find изнутри этого статического (или передать извлеченный документ в статический как параметр), прежде чем сможете выполнять операции над ним.

Мое предложение вы сделаете это статический, в котором вы передаете статические элементы запроса и пределы запроса и имеют статический сделать Product.find с передаваемыми параметрами и он вернется к вам извлеченный документ в обратный вызов или обещание.

+0

Это не работает. 'Product.query' не определено, и если я определяю функции построителя запросов на' Product.statics', я не могу их связать ... – gberger

+1

oh sorry. Я не проверял ваш код для компиляции. Я просто отвечал на ваше желание связать запросы и указать на недостаток. – world

+0

@gberger Я обновил его с помощью некоторого рабочего кода ... дайте мне знать, если это имеет больше смысла. – world