2017-03-06 3 views
0

Ich verwende Documentdb & laufende Abfrage von Documentdb. meine Beispielabfrage ist wie folgt aussieht:Warum dokumentdb Abfrage gibt Daten zurück, die nicht definiert oder leerer Wert ist?

studentQuery = { 
     query: 'SELECT * FROM root r WHERE ([email protected] OR [email protected]) AND r.collectionName="students"', 
     parameters: [{ 
      name: '@userid', 
      value: userid 
     }, { 
      name: '@code', 
      value: code 
     }] 
    }; 

Jetzt ist Problem, dass, wenn ich vorbei bin nur Benutzer-ID = „piyush123“ und code = „“, dann wird er zurückgespielt mir all diese Datensätze, welchen Code hat = „“ leeren Wert , wenn der Code nicht definiert ist, obwohl alle Dokumente zurückgegeben werden, die keinen Code enthalten.

In Kürze möchte ich nicht diese Datensätze, die null oder leere Zeichenfolge oder undefinierten Wert hat, kann ich es durch IS_DEFINED, IS_NULL, NOT IS_NULL Art von Schlüsselwörtern lösen, aber ich möchte es nicht in allen Abfragen verwenden, weil es meine Abfrage macht Struktur zu komplex, also möchte ich es sofort anwenden, also sollte ich mich nicht um alle Arten von Kontrolle überall kümmern, die meine Anstrengungen reduzieren können.

Antwort

1

Sie können eine UDF schreiben, die alle Fälle umschließt - leere Zeichenfolge, Nullen und undefined und diese innerhalb der Abfrage aufrufen.

  1. anmelden IsMissing UDF wie folgt mit CreateUserDefinedFunction
  2. Verwendung innerhalb einer Abfrage nach dem Namen. Zum Beispiel SELECT * FROM c WHERE udf.IsMissing(c.code) AND ...

Hier ist eine einfache Implementierung von IsMissing:

function isMissing(doc, prop) { 
    if (typeof doc[prop] === "undefined") { 
    return true; 
    } 

    if (doc[prop] === "" || doc[prop] === null) { 
    return true; 
    } 

    return false; 
} 
+0

Wie schreibt oder UDF-Funktion in Abfrage zu injizieren und wie es zu benutzen? Wenn Sie vorschlagen können, wäre es erwähnenswert. –

Verwandte Themen