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;
在我的 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;