实际计数与MongoDB中collection.find()的结果不同

实际计数与MongoDB中collection.find()的结果不同,mongodb,Mongodb,最近,我用pymongo编写了一个小应用程序来查询MongoDB中的数据。代码如下所示 colls = collection.find({'created': {'$gt': datetime.datetime(2014, 9, 14, 10), '$lt': datetime.datetime(2014, 9, 14, 17)}}, {'created':1, '_id':

最近,我用pymongo编写了一个小应用程序来查询MongoDB中的数据。代码如下所示

colls = collection.find({'created': {'$gt': datetime.datetime(2014, 9, 14, 10),
                                     '$lt': datetime.datetime(2014, 9, 14, 17)}},
                        {'created':1, '_id': 0})
print 'Totally count is ', colls.count()
到目前为止,一切都很好。但是,

results = []
for item in colls:
    results.append(item)

我发现结果的长度小于colls.count()。真奇怪?为什么它们不同?

除非您在分片集群中运行此命令并点击,否则您的结果表明集合中的元素比find查询中包含的元素多。要进行验证,只需重新运行不带参数的查询:

colls = collection.find({}, {'created':1, '_id': 0});
然后将该长度与计数结果进行比较

如果它们不同,则只需切换谓词即可查看哪些值超出给定范围:

colls = collection.find({'created': {'$lt': datetime.datetime(2014, 9, 14, 10),
                                     '$gt': datetime.datetime(2014, 9, 14, 17)}},
                        {'created':1, '_id': 0})

如果这对您没有任何帮助,并且您在
上创建了一个索引
,那么您可能在索引中有非日期时间值,并且只有在您查询时才有,因此您可以使用不同的索引来确保返回这些值

嗨,Adam,在创建的
上没有创建索引。而且很难找到那些不在find query中但涉及count()的。查找查询会丢失数据吗?而且我没有在分片集群中运行