我有一个传感器值的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,因此您需要检查一下。

另外,有关更多信息,请参见[Writing large files with Node.js]

关于node.js - MongoDB查找查询未返回所有值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16655828/

10-14 17:55
查看更多