Die Datenbank ist in der Nähe von 5 GB. Ich habe Dokumente wie:
%Vor%Ich möchte Nutzer zurückgeben, die mehr als 0 "Hobbies" haben Ich habe es versucht
%Vor%und es dauert alles RAM und kein Ergebnis.
TIA
P.S. in der Nähe habe ich Folgendes gefunden: "Füge ein neues Feld hinzu, um die Kategoriengröße zu ändern. Es ist eine übliche Praxis in der Mongo-Welt." ist das wahr?
In diesem speziellen Fall können Sie die Indexierung der Liste verwenden, um Ihr Problem zu lösen:
db.collection.find({"hobbies.0" : {$exists : true}}).limit(10)
Dies stellt nur sicher, dass ein 0. Element existiert. Sie können dasselbe tun, um sicherzustellen, dass die Liste kürzer als n oder zwischen x und y ist, indem Sie die vorhandenen Elemente an den Enden des Bereichs überprüfen.
Das stimmt irgendwie.
Laut Handbuch
%Vor%$ size
Der Operator $ size entspricht jedem Array mit der angegebenen Anzahl von Elemente. Das folgende Beispiel würde dem Objekt {a: ["foo"]} entsprechen, da dieses Array nur ein Element hat:
Sie können $ size nicht verwenden, um eine Reihe von Größen zu finden (zum Beispiel: Arrays mit mehr als 1 Element). Wenn Sie einen Bereich abfragen müssen, erstellen Sie ein zusätzliches Größenfeld, das Sie beim Hinzufügen von Elementen erhöhen
Sie können also nach der Array-Größe 0 suchen, aber nicht nach Dingen wie 'größer als 0'
In früheren Fragen wird erläutert, wie das Array-Count-Problem behandelt wird. Obwohl in Ihrem Fall, wenn ZERO wirklich der einzige Wert ist, auf den Sie testen möchten, könnten Sie das Array auf null setzen, wenn es leer ist und die Option nicht serialisieren, dann können Sie das Vorhandensein dieses Feldes testen. Denken Sie daran, auf Null zu testen und das Array zu erstellen, wenn Sie einem Benutzer ein Hobby hinzufügen möchten.
Für # 2, vorausgesetzt, Sie haben das Zählfeld hinzugefügt, ist es einfach, die gewünschten Felder aus der Datenbank auszuwählen und das Zählfeld einzufügen.
Wenn Sie nur Null Hobbies suchen müssen, und wenn die Hobbies-Taste nicht für jemanden mit Null-Hobbys eingestellt ist, verwenden Sie die EXISTS-Flagge. Fügen Sie einen Index für "Hobbies" zur Leistungssteigerung hinzu:
db.collection.find ({hobbies: {$ exists: true}});
Wenn jedoch die Person mit null Hobbys leeres Array hat und Person mit 1 Hobby ein Array mit 1 Element hat, dann verwenden Sie diese generische Lösung:
Pflegen Sie eine Variable namens "hcount" (Hobbycount), und setzen Sie sie immer gleich der Größe des Hobbys-Arrays in jedem Update. Index auf dem Feld "hcount" Dann können Sie eine Abfrage wie folgt durchführen:
%Vor%3 - Von @Johns antwortet, "$ size" ist auch ein guter Operator für diesen Zweck. Ссылка
Tags und Links mongodb mongodb-.net-driver