2013-02-06 3 views
5

Implementieren einer Anwendung, die eine Tabelle für Mail-ID-Präsenz aus einer Liste von etwa 10 E-Mail-IDs sucht. Versucht mit $ oder $ in.

$ scheint scheint eine bessere Leistung, aber nicht signifikant. Ist einer mehr als der andere optimiert?

+3

Gut für Anfänger ein $ in nur einen Index, das ist wichtig, aus dem Grund, warum ein $ oder mehr (eine pro Klausel). Ein $ oder ist wie das Erhalten des Ergebnisses für jede Klausel und das anschließende Zusammenführen von Duplikaten und das Zurückgeben eines Ergebnisses. Das ist also ein wichtiger Punkt, den wir hier betrachten müssen, während $ in eine Bereichskennung ist. Nach den Gesetzen der Informatik würde ich sagen, dass, wenn Sie $ darin verwenden können, mehr optimiert wäre als $ oder – Sammaye

Antwort

15

MongoDB docs haben the answer:

„Wenn > $ oder mit < Ausdrücken, die Gleichheit prüft, ob der Wert des gleichen Feldes sind, die $ in Bediener über die $ oder Betreiber wählen.“

1

"Während" $ oder "immer funktioniert, verwenden Sie" $ in "wann immer möglich, da der Abfrageoptimierer es effizienter handhabt."

Darüber hinaus hat "$ in" mehr Lesbarkeit.

Ref: MongoDB: The Definitive Guide

0

$or Operator ist logischer Operator, wo Sie Ihre eigenen Login aber $in Operator ist Vergleichsoperator definieren wo Sie vergleichen können Sie nicht Ihre auf Logik setzen können.

Syntax von $in:

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } 

Beispiel:

db.account.find({ qty: { $in: [ 5, 15 ] } }) 

Syntax von $or:

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 

Beispiel:

db.account.find({ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }) 

Hinweis: Konto ist Ihre Sammlung Name