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

时间:2015-03-01 20:49:27

标签: javascript arrays mongodb meteor

在我的Meteor应用程序中,我在后端有一个Mongo Collection,它有一个客户想要订阅的文档。该文档包含一系列对象,其长度可超过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个项目,而无需将其他79,990加载到内存中(即保持查询超快)?或者,除了80,000长度的文档之外,还是一个更好的解决方案来维护一个单独的文档,它只包含任何给定时间点的最新10个项目?

谢谢!

1 个答案:

答案 0 :(得分:0)

UPDATE :好像$ slice可以在服务器上处理这个问题。虽然我仍然担心如果这是尝试加载一堆数据我不需要内存,只是为了返回最后10个。

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