2016-06-21 87 views
1

我想在Mongoose中做这样的事情。可能吗?猫鼬定制查询构建器

// 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. 您需要决定是否要使用猫鼬实例方法或静态。如果您使用的是实例方法,那么您必须先从您的数据库中检索文档。当你这样做时,你可以调用任何实例方法。并且,在所有实例方法中,您将参考this这将是您的文档。

  2. 但是,如果您想使用猫鼬静力学,您将不会通过this引用该文档。相反,您必须首先在该静态内执行Model.find(或将检索到的文档作为参数传递给static),然后才能对其执行操作。

我的建议是你做这一个静态的,其中您通过静态的查询元素和查询的限制,并有静做Product.find与传递的参数,并把它在返回到您的文档检索回调或承诺。

+0

这并不在所有的工作。 'Product.query'是未定义的,如果我在'Product.statics'上定义查询生成器函数,我不能链接它们... – gberger

+1

哦对不起。我没有检查你的代码的编译问题。我只是回应你的想法,想要链接查询并指出它的缺陷。 – world

+0

@gberger我用一些工作代码更新了它......让我知道现在是否更有意义。 – world