簡體   English   中英

MongoDB查找查詢未返回所有值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM