2016-09-15 86 views
1

有沒有辦法建立完整的對象貓鼬作爲查詢使用?在進行搜索時,我需要傳遞許多查詢參數,並在express中間件中對它們進行消毒。從那些我想構建查詢對象。如何爲貓鼬查詢做對象?

我結束了這樣的事情:

裏面中間件:

res.locals.filter = { 
    query: ..., 
    projection: ..., 
    sort: ..., 
    limit: ...., 
} 

內部路由器:

User.find(res.locals.filter.query) 
    .sort(res.locals.filter.sort) 
    .limit(res.locals.filter.limit) 
    .exec() 

有什麼辦法來格式化我的過濾器,所以我可以一次通過它嗎?發現了一些例子,但似乎沒有什麼工作對我來說...

換句話說這樣做:

User.query(filter) 

回答

0

因爲它是由JohnnyHK指出,find通話與像$query$orderBy對象字段的風格,外殼僅支持(現在是棄用),這樣就不會有任何內置支持。

0

您可以通過添加query爲您模式的static方法做到這一點:

userSchema.statics.query = function(filter) { 
    return this.find(filter.query).sort(filter.sort).limit(filter.limit); 
}; 

然後你可以撥打如下:

User.query(res.locals.filter).exec(callback); 
+0

感謝您的輸入。我正在想更多這樣的[鏈接](http://stackoverflow.com/questions/22441482/order-and-limit-results-in-a-query-with-a-callback)。 'myModel.find(filter,{sort:{created_at:-1},limit:10},function(err,items){})'但是作爲一個對象並使用參數擴展功能,但我不知道它們的名字。這有道理嗎? – johnymachine

+1

@johnymachine僅支持''query'和['$ orderBy'](https://docs.mongodb.com/manual/reference/operator/meta/orderby/)等對象字段調用'find'風格的風格。在shell中(現在已被棄用),所以沒有任何內置的支持,你需要自己做。 – JohnnyHK