MongoDB: 如何订阅大数组的小子集?

MongoDB: How to Subscribe to a Small Subset of a Large Array?

在我的 Meteor 应用程序中,我在后端有一个 Mongo 集合,其中有一个 large 客户想要订阅的文档。该文档包含一个对象数组,其长度可以超过 80,000 个项目。但是客户端只对该数组中的 10 个最新项目感兴趣。

这是文档示例:

{ "_id" : "TfPCCaupse8cgwYeQ", "createdAt" : ISODate("2015-03-01T20:42:24.491Z"), "type" : "historicalTrades", "data" : [ { "date" : "1422161074", "price" : 1546.01, "amount" : 2.834, "tid" : "19009899", "type" : "sell" }, { "date" : "1422161074", "price" : 1546.01, "amount" : 1.822, "tid" : "19009900", "type" : "sell" }, { "date" : "1422161074", "price" : 1546.01, "amount" : 7.333, "tid" : "19009901", "type" : "sell" }, { "date" : "1422161074", "price" : 1546.01, "amount" : 16.98, "tid" : "19009902", "type" : "buy" }, ... ... ... ] }

是否可以只订阅该数组的前 10 项或最后 10 项,而无需将其他 79,990 项加载到内存中(即保持查询速度超快)?或者是更好的解决方案是在 80,000 长度的文档之外维护一个单独的文档,该文档仅包含任何给定时间点的最新 10 项?

谢谢!

UPDATE:似乎 $slice 可以在服务器上处理这个问题。虽然我仍然担心这是否试图将一堆我不需要的数据加载到内存中,只是 return 最后 10 个。

var subArray = Collection.findOne(
  {type:'historicalTrades'},
  {fields:
    {data: {$slice:10}
  }
}).data;