2015-06-08 5 views
5

Das klingt merkwürdig, und ich hoffe, ich mache etwas falsch, aber meine MongoDB-Sammlung gibt den Count um eins in meiner Sammlung zurück.Falsche Zählung von MongoDB (WiredTiger)

Ich habe eine Sammlung mit (ich bin sicher) 359671 Dokumente. Der Befehl count() gibt jedoch 359670 Dokumente zurück.

Ich bin der count() mit dem Befehl Mongo Shell ausführen:

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

Das ist falsch.

Es findet nicht jedes einzelne Dokument in meiner Sammlung.

Wenn ich die folgende Abfrage zur Verfügung stellen zu zählen, bekomme ich das richtige Ergebnis:

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

Ich glaube, das ein Fehler in WiredTiger ist. Soweit ich weiß, hat jedes Dokument die gleiche Definition, ein _id-Feld einer Ganzzahl von 0 bis 359670 und ein BinData-Feld. Ich hatte dieses Problem nicht mit der älteren Speicher-Engine (oder Mongo 2, beide könnten das Problem verursacht haben).

Ist das etwas, das ich falsch gemacht habe? Ich möchte die Abfrage {_id: {$ exists: true}} nicht verwenden, da diese 100 Mal länger dauert.

+1

Verwenden Sie einen Sharded Cluster? Wenn ja, siehe http://docs.mongodb.org/manual/reference/method/db.collection.count/#sharded-clusters – JohnnyHK

+0

Ich benutze keinen Cluster, aber danke für Ihren Vorschlag. – James

Antwort

9

Entsprechend dieser issue kann dieses Verhalten auftreten, wenn mongodb einen harten Absturz erfährt und nicht ordnungsgemäß heruntergefahren wird. Wenn keine Frage gestellt wird, fällt mongodb wahrscheinlich nur auf die gesammelten Statistiken zurück.

Laut dem Artikel sollte der Aufruf db.COLLECTION.validate(true) die Zähler zurücksetzen.