【发布时间】:2013-09-21 19:20:43
【问题描述】:
我正在分析 MongoDB 数据源以检查其质量。
我想知道是否每个文档都包含属性time:所以我使用了这两个命令
> 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"
}
【问题讨论】:
-
这太奇怪了,你能更新一下文档结构吗....
-
我可以插入、更新和读取集合。我用预期的文档结构更新了答案。
-
难道它也算“时间戳”?您也可以尝试在“存在”查询中查找哪些对象被多次计算(根据stackoverflow.com/questions/4224773/…)。 “解释()”输出中有什么有趣的东西吗?您是否重命名了该字段?
-
explain() 显示的唯一有趣的事情是查询期间扫描的对象数量是相同的。两个查询都扫描了一个等于第二个结果大小的对象(293525):我认为该点在 find() 调用中。我尝试使用 find({}) 但结果(如预期)是相同的。我删除了所有带有时间戳字段的文档并重新运行查询,结果如下:db.droppay.find().count() = 101624; db.droppay.find({"ts": {$exists: true}}).count() = 102402; db.droppay.find({"time": {$exists: true}}).count() = 103327.
标签: mongodb