2016-07-29 77 views
0

我不知道如何從Mongo數據中獲得有序列表。我需要return.find()來自mongo collection的結果,以這種方式:排序在MongoDB中

例如! 起初,我對汽車行駛10個文件的一個集合:

//doc structure: 
{ 
    _id: 10, 
    name: name, 
    type: [suv, sedan, sport], 
    driver: [object Driver] 
    pubDate: new Date() 
} 

而對於第二個,我有兩個關口。有兩種類型的驅動程序:

//doc structure: 
{ 
    _id: 20, 
    name: name, 
    type: stupid 'or' clever 
} 

,現在我想在這個順序返回列表,例如:

  1. 名稱:福特福克斯,驅動程序:{名稱:尼克,類型:聰明 },pubDate:20:00;
  2. 名稱:日產GTR,司機:{姓名:安德魯,類型:聰明},pubDate:19:00;
  3. name:Jaguar xKR,driver:{name:John,type:clever},pubDate:15:00;
  4. 名稱:本田雅閣,驅動程序:{名稱:切赫,類型:聰明},發佈時間:14:00
  5. 名稱:日產GTR,驅動程序:{名字:安德魯,類型:聰明} ,pubDate:13:00;
  6. 姓名:特斯拉,司機:{姓名:豪爾赫,類型:愚蠢},pubDate:20:00;
  7. 姓名:奧迪q7,司機:{姓名:佩吉,類型:愚蠢},pubDate:19:00;
  8. 名稱:寶馬325,司機:{姓名:米妮,類型:愚蠢},pubDate:18:00;
  9. 姓名:CADILLAC,司機:{姓名:蒂莫西,類型:愚蠢},pubDate:16:00;
  10. 姓名:SAAB,司機:{姓名:朱莉婭,類型:愚蠢},pubDate:15:00;

現在,我有一個解決方案,但它是不正確的,它不適用於無限滾動。流星例如:

// declare collections 
Cars = Mongo.collection('cars', { 
    name: name, 
    type: [suv, sedan, sport], 
    driver: [object Driver] 
    pubDate: new Date() 
}); 

Driver = Mongo.collection('cars', { 
    name: name, 
    lastName: lastName, 
    type: stupid // or clever 
}); 



// declare helpers for client: 
Template.carList.helpers({ 
    'clever': function() { 
    return Cars.find({driver.type: 'clever'}, {sort: {pubDate: -1}); 
    // returned only clever 
    }, 
    'stupid': function() { 
    return Cars.find({driver.type: 'stupid'}, {sort: {pubDate: -1}); 
    // returned only stupid 
    } 
}): 

和HTML與Blaze:

<template name='carList'> 
    ... 
     {{#each clever}} 
     ... 
     {{/each}} 
     {{#each stupid}} 
     ... 
     {{/each}} 
</template> 

它的工作,但它不是靈活的方式,因爲如果我需要設置一些新的參數排序,我會得到很多問題它。而這個例子有一個Drivers集合,但是如果用戶類型將在不同的集合中,比如愚笨的&聰明?

我認爲必須有一個更優雅的方式來聚合這個。

哪個?謝謝!

+0

爲什麼你不能將你想要排序的列作爲參數傳遞給你的'聰明'和'愚蠢'幫手。 – CodeChimp

+0

你能舉一些例子嗎? –

回答

0

如何將排序列表傳遞給幫助程序並使用它來構建排序?

超級簡單現成的,頂級我的頭例如:

Template.carList.helpers({ 
    clever: function(sortField) { 
    options = {}; 
    if (sortField) { 
     options.sort = {sortField: -1}; 
    } 
    return Cars.find({driver.type: 'clever'}, options); 
    } 
}); 

而在HTML:

<template name='carList'> 
    ... 
     {{#each clever "name"}} 
     ... 
     {{/each}} 
     {{#each stupid}} 
     ... 
     {{/each}} 
</template> 

你可以得到一個稍微複雜和傳遞關鍵/值對,Spacebars通過Spacebars.kw(讀取herehere)支持。您基本上會傳入像name=-1 pubDate=1這樣的參數,然後在您的幫助器中解析出傳遞的結果散列並將它們添加到您的選項中。你可能需要琢磨它是如何工作的,但至少應該讓你開始。