我希望能够获取数据库中的十个最新条目,并按价格以最昂贵的第一个进行排序。 (日期和价格只是示例;这可能适用于任何两个可排序的字段。)如果我按价格排序,我将不会获得最近的十个条目,所以我必须按时间排序。但是,当我按时间排序时,结果按时间而不是价格排序。我可以制作一个按时间抓取文件并按价格订购的查询吗?或者我必须在查询返回后对条目进行排序?
答案 0 :(得分:3)
如果您的文档的结构类似于:
{_id: ObjectId("50a8240b927d5d8b5891743c"),
price: 12,
date: new Date("Oct 04, 2012")}
在控制台中,您可以运行以下查询:
db.prices.find({'date':ISODate("Oct 04, 2012")}).sort({'price':-1});
这将找到日期设置为 2014年10月4日的所有对象,并根据价格命令降序。
如果您想要撤消排序顺序,可以将排序查询替换为:' price':1
修改强>
此外,如果您想拥有多个排序字段,例如以最高价格获得最新的排序字段,您可以使用以下查询:
db.prices.find().sort({'price':-1,'date':-1})
编辑2:
与更新的评论一样,查询应该获得前十个最新项目,并按照价格最贵的价格排序:
db.prices.find().sort({'date':-1}).limit(10).sort({'p':-1});
这是我现在想到的唯一方法。 获取按日期排序的前10个项目,之后应用另一个过滤器按价格对其进行排序。