我使用Mongoose和node.js来查询我们的mongoDB。我之前曾问过一个关于效率的问题(Way to lower memory usage by mongoose when doing query),这有助于教我使用lean()和stream()。
虽然内存效率有了很大提高,但我们仍然有一个问题:抓取像
这样的文档Tig
r in th
snow
我正在尝试按字段过滤输出(这些文档充满了数据,但我们正在构建的操作仅使用一些信息,来自几十万个文档),以便从我们需要传输的数据中减少不必要的批量和合作。具体来说,使用此示例,我们使用字段过滤器
{
field_a : abc,
field_b : def,
sub_docs : [
{
sub_doc_field_a : xyz,
sub_doc_field_b : afk.
sub_doc_submissions : [
{
submission_id: 0,
score: 1
},
{
submission_id: 1,
score: 1
}...
},...
]
}
最后一部分导致了这个问题,它总是作为一个对象返回,即使精益以其他方式返回原始json。在跟踪内存使用情况时,返回信息的那部分占用的内存比简单的整数值占用的内存多。只是给出一个可见的差异示例,这是我通过console.log运行结果时的输出:
{"field_a": 1, "field_b": 1, "sub_docs.sub_doc_submissions.score":1}
理想的输出就像
{ field_a: abc,
field_b: def,
sub_docs:
[ { sub_doc_submissions: [Object] },
{ sub_doc_submissions: [Object] },
{ sub_doc_submissions: [Object] } ] }
甚至更好
{ field_a: abc,
field_b: def,
sub_docs:
[ { sub_doc_submissions: {score: 1} },
{ sub_doc_submissions: {score: 1} },
{ sub_doc_submissions: {score: 1} } ] }
由于内存使用几乎完全来自查询本身,我需要找到一种方法来告诉查询不要将sub_docs.sub_doc_submissions.score值作为对象返回,而只是返回它们的整数值。
有没有办法使用mongoose,或者如果有必要,使用mongo本身来执行此任务,以便mongoose不会尝试将返回的数据实例化为对象,尽管处于精简模式?