2011-11-09 150 views
6

我正在分析一個MongoDB數據源來檢查其質量。 我想知道如果每個文檔包含屬性time:所以我用這個兩個命令MongoDB:查詢結果大小大於集合大小

> db.droppay.find().count(); 
291822 
> db.droppay.find({time: {$exists : true}}).count() 
293525 

我怎麼能比包含在整個集合中的元素某一領域更多的元素?出了什麼問題?我無法找到這個錯誤。 如果有必要我可以發佈文檔的預期結構。

Mongo Shell版本是1.8.3。 Mongo Db版本是1.8.3。

在此先感謝


這是文檔錄入的預期結構:

{ 
    "_id" : ObjectId("4e6729cc96babe974c710611"), 
    "action" : "send", 
    "event" : "sent", 
    "job_id" : "50a1b7ac-7482-4ad6-ba7d-853249d6a123",  
    "result_code" : "0", 
    "sender" : "", 
    "service" : "webcontents", 
    "service_name" : "webcontents", 
    "tariff" : "0", 
    "time" : "2011-09-07 10:22:35", 
    "timestamp" : "1315383755", 
    "trace_id" : "372", 
    "ts" : "2011-09-07 09:28:42" 
} 
+0

多數民衆贊成在完全奇怪,你可以更新文件結構.... – RameshVel

+0

我可以插入,更新和閱讀集合。 我用預期的文檔結構更新了答案。 – LoSciamano

+0

難道它也算「時間戳」嗎?您也可以嘗試查找哪些對象在「exists」查詢中被多次計數(按照http://stackoverflow.com/questions/4224773/fast-way-to-find-duplicates-on-indexed-column-在-mongodb的)。 「explain()」輸出中是否有一些有趣的內容?你是否重命名該字段? – mikalai

回答

0

有可能time值是數組類型。

你可能會做db.droppay.find({time: {$type : 4}})找到這樣的文件。

+1

不錯的建議!但不幸的是,這不是問題。我試過這個查詢,它返回一個空的結果... – LoSciamano

+0

@LoSciamano謝謝你讓我知道。 – lig

1

我的猜測是這個索引問題。我敢打賭,droppay有一個關於時間的索引,並且一些不安全的操作更新了底層集合而不更新索引。

你可以試試repairing the db,看看它是否做得更好。

祝你好運。