伯爵不同于

时间:2014-09-25 10:27:09

标签: mongodb

最近,我写了一个小应用程序,用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()。太奇怪了?为什么他们不一样?

1 个答案:

答案 0 :(得分:0)

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

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})

如果这对您没有任何帮助,并且您在created上有索引,那么您可能在索引中包含非日期时间值,并且在查询时只有one type will match,因此您可以hint一个不同的索引,以确保它们被返回。