MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Es kann keine abgedeckte Abfrage für die fragmentierte Sammlung in MongoDB abgerufen werden

Wie bei MongoDB 2.6 erhalten Sie keine vollständig abgedeckte Shard-Abfrage, da es eine zusätzliche Abfrage gibt, um zu überprüfen, ob das betreffende Shard dieses Dokument besitzt (siehe SERVER-5022 im MongoDB Issue Tracker).

Die mongos Router filtert Dokumente, die auf einem Shard gefunden werden, die dort aber gemäß den Sharding-Cluster-Metadaten nicht vorhanden sein sollten.

Dokumente können auf mehr als einem Shard vorhanden sein, wenn:

  • Es gibt eine Chunk-Migration in Bearbeitung:Dokumente werden von einem Donor-Shard auf ein Ziel-Shard kopiert und nicht aus dem Donor-Shard entfernt, bis die Chunk-Migration erfolgreich abgeschlossen ist.

  • Dokumente sind aufgrund einer fehlgeschlagenen Migration oder einer unvollständigen Bereinigung auf einem Shard „verwaist“. Es gibt einen cleanupOrphaned Admin-Befehl in MongoDB 2.6, das gegen einen fragmentierten mongod ausgeführt werden kann verwaiste Dokumente zu löschen.

Diese Einschränkung für abgedeckte Abfragen ist in den Limits angegeben:Abgedeckte Abfragen in Sharded-Clustern Abschnitt der MongoDB-Dokumentation, sollte aber auch im Tutorial zu Abgedeckte Abfragen erstellen . Ich habe DOCS-3820 ausgelöst um dies deutlicher zu machen.