2014-03-28 43 views
8

我想在具有特定屬性的最高價值的集合中找到一個文檔。流星:查找具有最高價值的文檔

假設文件具有以下結構

{ 
    _id: 'jswehfkwefkjw', 
    price: 10, 
    .... 
} 

如何選擇具有最高的性價比文檔?

我發現這個

transactions.find("id" => x).sort({"sellprice" => -1}).limit(1).first(); 

但我不能轉換到這個流星:(我有現在看起來是這樣

Articles.find({}, {sort: {price: -1}}).fetch(); 

但是,這並沒有這樣做。有什麼建議?

回答

11

我並不完全清楚你在「這不行」中的含義

但我會建議使用findOne而不是fetch,因爲fetch返回一個數組並且你想要一個文檔。

Articles.findOne({}, {sort: {price: -1}}); 

Articles.find({},{limit: 1, sort: {price: -1}}); 

,然後使用提取和使用陣列符號[0]或下劃線_.first(陣列)

+0

好的,但我怎麼能做到這一點在服務器端,因爲在發佈函數中使用'findOne'會拋出一個錯誤 –

+0

作爲@ user728291提到你將使用限制選項 Articles.find({},{limit: 1,sort:{price:-1}}); 在客戶端,您可以使用fetch,然後使用[0]以數組樣式訪問第一個元素,或使用下劃線_.first(array) – Andreykul

1

如你需要的蒙戈版本抓住所述第一元件如果您想對返回的對象進行排序和限制,請提供排序和限制選項。兩者都在meteor docs on find()中描述。

如果你想返回遊標與具有最高的性價比一個項目,然後這應該工作:

Articles.find({},{limit: 1, sort: {price: -1}}); 

如果你想要對象本身再放入取(),或使用findOne()。如果使用findOne(),則限制選項是多餘的。

相關問題