2014-09-25 48 views
1

最近,我寫了一個小應用程序來查詢來自MongoDB的數據與pymongo。代碼如下所示該計數不同於

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()。這很奇怪?他們爲什麼不同?

回答

0

除非您在分片羣集中運行此命令,並且打到this bug,否則您的結果表明集合中的元素多於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}) 

如果讓你什麼,你有created一個索引,那麼你可能有非日期時間索引中的值並且只有one type will match當您查詢時,所以您可以hint一個不同的索引以確保它們被返回。

+0

嗨,亞當,沒有索引創建'創建'。並且很難找出那些不在find查詢中但涉及count()的人。 find查詢是否會丟失數據? – Jacky 2014-09-26 05:01:05

+0

而我沒有運行在分片羣集中 – Jacky 2014-09-26 06:40:24