[英]MongoDB Find Query Not Returning All Values
我有一个传感器值的mongoDB集合,我试图在该集合中查找某个日期范围内的所有文档。 我已经阅读了文档,并且实际上已经实现了代码以查找所有数据。 但是,我随后将所有文档写入CSV文件,以便可以从网络上下载它们。 我遇到的问题是查询似乎正在寻找正确日期范围内的所有数据(我已经在服务器端和客户端同时打印了日期,并且都匹配了正确的日期范围)但是,CSV文件仅返回大约一半的数据(不一致)。 例如,假设我要查询我的集合以返回之间存储的所有文档:
(2013年5月9日星期四07:57:06 GMT-0400)和(2013年5月14日星期二00:40:43 GMT-0400)
当我单击下载数据按钮时,它将向服务器发送请求以查找该范围内的所有文档,然后将这些文档流式传输为文本文件并将其提供给客户端。 我将控制台和服务器上的日期都打印到控制台上,并且所有内容都匹配...所以我很确定mongodb find函数在其查询中使用了正确的日期。
但是,当我打开此查询的CSV文件时,它为我提供了一份文档列表,其范围是(2013年5月9日星期四07:57:15->第一个日期输入项gte至开始日期)...但仅返回值(2013年5月11日星期六01:04:09)。 该查询大约需要三天的时间,而这些数据似乎丢失了。 由于我的传感器每8秒将数据上传到集合中,因此这是成千上万的条目。 使用find函数可以检索的文档数量是否有某种数据限制? CSV文件有将近6,850个条目(在Thu至Sat之间)...但是为什么不返回Thu至Tue之间的值的完整列表? 我已经检查了数据库,并知道它在此时间范围内一直存储数据……所以我认为这不是问题。 有人有什么想法吗?
这是我的查找功能的代码:
collection.find({"addr": Number(json.addr),
"Time": {$gte:new Date(json.startDate),
$lte:new Date(json.endDate)}},
proj,
function (err, docs)
{
if( err || !docs) console.log("No data found");
else
{
var tempname=json.type+".csv";
var stream=fs.createWriteStream("pages/"+tempname);
stream.on('error', function(e){console.error(e);});
docs.each(function(err2, doc)
{
if (!doc)
{
console.log("done");
stream.end();
res.writeHead(200, {"Content-Type": "application/json"});
res.write(JSON.stringify({fname:tempname}));
res.end();
return;
}
stream.write(doc.Time+","+doc[json.type]+"\n");
});
}
});
当缓冲区已满时, stream.write()
返回false,因此您需要检查一下。
另请参阅[使用Node.js编写大文件]了解更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.