2011-11-09 152 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,看看它是否做得更好。

祝你好运。