2015-04-23 45 views
2

我想生成一個響應,返回按3個不同列排序的相同集合。這是我目前擁有的代碼:如何在一個獲取請求中返回多個Mongoose集合?

var findRoute = router.route("/find") 
findRoute.get(function(req, res) { 
    Box.find(function(err, boxes) { 
    res.json(boxes) 
    }).sort("-itemCount"); 
}); 

正如你所看到的,我們正在做一個GET請求,查詢的複選框,然後由itemCount末對它們進行排序。這對我不起作用,因爲請求只返回按itemCount排序的單個JSON集合。

如果我想要返回兩個更多的集合,例如namesize屬性(全部在同一請求中),我該怎麼辦?

回答

3

克里特島的目的是封裝的信息和鏈中的find查詢,如:

var findRoute = router.route("/find"); 
var json = {}; 

findRoute.get(function(req, res) { 
    Box.find(function(err, boxes) { 
    json.boxes = boxes; 

    Collection2.find(function (error, coll2) { 
     json.coll2 = coll2; 

     Collection3.find(function (error, coll3) { 
     json.coll3 = coll3; 

     res.json(json); 
     }).sort("-size"); 
    }).sort("-name"); 
    }).sort("-itemCount"); 
}); 

只要確保做適當的錯誤檢查。

這是一種很醜,讓你的代碼難以閱讀。嘗試使用async或甚至承諾(Qbluebird是很好的例子)模塊來適應這種邏輯。

0

你試過了嗎?

Box.find().sort("-itemCount").exec(function(err, boxes) { 
    res.json(boxes) 
}); 

而且基於2個或多個字段,你可以使用排序結果:

的.sort({名稱:1,大小:-1})

讓我知道是否有幫助。

3

如果我沒有理解好了,你想這樣的事情:return Several collections with mongodb

告訴我,如果沒有什麼幫助。

再見。

+0

或者您可以使用承諾這一點。 http://stackoverflow.com/questions/22794827/mongoose-and-promises-how-to-get-an-array-of-query-results – vanadium23

+0

這似乎是我需要的。我會稍微圈出結果。 @ vanadium23 - 我會在Charly's完成後立即檢查你的建議。非常感謝! –

相關問題