在我的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个项目?
谢谢!
答案 0 :(得分:0)
UPDATE :好像$ slice可以在服务器上处理这个问题。虽然我仍然担心如果这是尝试加载一堆数据我不需要内存,只是为了返回最后10个。
var subArray = Collection.findOne(
{type:'historicalTrades'},
{fields:
{data: {$slice:10}
}
}).data;