2016-09-26 66 views
0

我有一個已經困擾我很久的問題,接下去(例如代碼演示):蒙戈:回報不等於計數()

from mongoengine import* 

Class Scan(Documnet): 

     name=StringField() 
     ..... 

queryset=Scan.objects.filter(name="Bob") 

number1=queryset.count() 

number2=len(queryset) 

然而,number1=1782number2=1668number1 != number2

任何人都可以告訴我原因?

+0

我會使用DB查詢日誌(http://stackoverflow.com/questions/4375784/log-all-sql-queries)找出兩種方法之間的差異,看到這一切都錯了。 – makaveli

+0

感謝您的分享,但我仍然陷入困境。我無法理解 – DlutAF

+0

您是否在分散的羣集中? – styvane

回答

1

這是如在documentation.

提到在一個分片簇是由於下列原因之一,db.collection.count()可以導致如果orphaned documents存在一個不準確的計數或者如果chunk migration正在處理。

要避免這些情況,請在分片羣集上使用db.collection.aggregate()方法的$ group階段對文檔進行求和。例如,以下操作會對集合中的文檔進行計數:

您可以使用aggregate方法按文檔中的建議操作。

Scan.aggregate(
    {'$group': { 
     '_id': None, 
     'count': {'$sum': 1} 
    }} 
) 
+0

你爲我做了一個大忙! THKS! – DlutAF