繁体   English   中英

MongoDB:如何订阅大型阵列的小型子集?

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

在我的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个或最后10个项目,而不必将其他79,990加载到内存中(即保持查询超快)? 还是最好的解决方案是在长度为80,000的文档之外再保留一个单独的文档,该文档在任何给定时间点仅包含最新的10个项目?

谢谢!

更新 :好像$ slice可以在服务器上处理此问题。 尽管我仍然担心这是否试图将不需要的数据加载到内存中,仅返回最后一个10。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM