2015-06-08 12 views
5

To brzmi dziwnie, i mam nadzieję, że robię coś nie tak, ale moja kolekcja MongoDB odsyła Liczbę przez jedną z mojej kolekcji.Nieprawidłowa liczba zwrócona przez MongoDB (WiredTiger)

Mam kolekcję z (jestem pewien) 359671 dokumentów. Jednak polecenie count() zwraca 359670 dokumentów.

ja wykonaniem polecenia count() za pomocą powłoki Mongo:

rs0:PRIMARY> db.COLLECTION.count() 
359670 

To jest błędne.

Nie znajduje każdego dokumentu w mojej kolekcji.

Gdybym podać następujące zapytanie liczyć, otrzymuję poprawny wynik:

rs0:PRIMARY> db.COLLECTION.count({_id: {$exists: true}}) 
359671 

Wierzę, że jest to błąd w WiredTiger. O ile mi wiadomo, każdy dokument ma tę samą definicję, pole _id liczby całkowitej z zakresu od 0 do 359670 i pole BinData. Nie miałem tego problemu ze starszym silnikiem pamięci masowej (lub Mongo 2, albo mógł spowodować problem).

Czy to coś, co zrobiłem źle? Nie chcę używać kwerendy {_id: {$ exists: true}}, ponieważ trwa to 100 razy dłużej.

+1

Czy używasz uszkodzonej gromady? Jeśli tak, zobacz http://docs.mongodb.org/manual/reference/method/db.collection.count/#sharded-clusters – JohnnyHK

+0

Nie używam klastra sharded, ale dziękuję za sugestię. – James

Odpowiedz

9

Zgodnie z tym issue, takie zachowanie może wystąpić, gdy mongodb dozna poważnego wypadku i nie zostanie wyłączony z wdziękiem. Jeśli nie wydaje żadnego zapytania, mongodb prawdopodobnie po prostu wraca do zebranych statystyk.

Zgodnie z artykułem wywołanie db.COLLECTION.validate(true) powinno zresetować liczniki.