2014-03-28 44 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(),则限制选项是多余的。

相关问题