Wählen Sie die Stringlänge in mongodb

8

Wie fragt man mongodb nach der Länge eines bestimmten Strings / Textfelds? Zusätzlich wie würden Sie die maximale Länge eines Abfrage-Sets finden?

    
user1018364 01.02.2013, 13:43
quelle

5 Antworten

5

Leider unterstützt das Aggregations-Framework einen "len" -Operator nicht, um Strings automatisch in ihre Länge zu konvertieren während Sie eine Abfrage durchführen. Also musst du das in deinem eigenen Code lösen. Du könntest

  1. Verwenden Sie eine MapReduce-Funktion, um Stringlängen zu berechnen
  2. Abfrage für die Strings und berechnen Sie ihre Länge auf der Anwendungsebene

Der Unterschied zwischen diesen Methoden besteht darin, dass die erste auf der Datenbank ausgeführt wird, während die zweite auf Ihrem Anwendungsserver ausgeführt wird. Ich würde die letztere Option empfehlen, da MapReduce sehr langsam und mühsam sein kann.

    
Philipp 01.02.2013 14:28
quelle
4

Sky ist das Limit! Nein, tatsächlich ist es 16 MB für ein Dokument in mongodb . Dies kann die maximale Länge einer Zeichenfolge in den Datensätzen sein.

Um die maximale Länge in einem Abfrage-Set zu finden, können Sie dies umgehen:

  1. Halten Sie die Länge des Textes zusammen mit dem Text selbst.
  2. Sortieren Sie Ihre Ergebnismenge absteigend nach der Länge.
  3. Erhalte das erste Element mit der maximalen Länge.
ogzd 01.02.2013 13:56
quelle
2

Wie wäre es stattdessen mit regulärem Ausdruck?

%Vor% %Vor%     
shuhai 26.04.2014 09:20
quelle
1

Also, ich hoffe, das hilft. :-) Ich stieß auf das gleiche Problem - und es dauerte eine Weile, bis die Map-Reduction funktionierte.

%Vor%

Response enthält das Map-Reduction-Ergebnis

%Vor%

Viel Glück, lassen Sie es mich wissen, wenn Sie eine andere Variante brauchen!

    
Bas Kuis 05.03.2015 20:19
quelle
-1

Im Gegensatz zu SQL kennt MongoDB die Länge von Feldern als solche nicht wirklich. Es weiß höchstens, wenn es indiziert, dass das Feld entweder unter 1024 Bytes ist oder nicht.

Als solches müssen Sie wahrscheinlich die Client-Seite reparieren. Du könntest hier ein $where verwenden, aber ich denke, dass du das falsch ansiehst, wenn du das machen willst.

Du könntest auch MR benutzen, wie @Philipp sagt, aber du schaust hier wahrscheinlich wieder in die falsche Sache.

Eine Abfrage in MongoDB ist in der Tat ein BSON-Dokument. Daher ist die maximale Länge eines Abfrage-Sets (abhängig davon, was Sie als "Abfrage-Set" definieren) immer 16 MB (im Moment).

Viele Treiber bieten eine Möglichkeit, um eine Struktur (Hash oder Dict oder was auch immer) in BSON zu codieren, so dass Sie die Länge der codierten Zeichenfolge beurteilen können, um die Größe Ihrer Abfrage zu verstehen.

    
Sammaye 01.02.2013 14:30
quelle

Tags und Links