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