2015-02-09 9 views
5

Microsoft Azure-Dokumente BadRequestException Eine ungültige Abfrage wurde mit Filtern für Pfade angegeben, die nicht range-indiziert sind. Erwägen Sie, in der Anfrage den Header für die zulässige Suche hinzuzufügen.DocumentDB - Zwei Pfade in der Abfrage können nicht verglichen werden

Meine Frage ist:

SELECT c.id FROM users c WHERE (c.lat < 29.89) 

OVER ?? Anzahl der Dokumente (wie es keine Möglichkeit, die Anzahl von Dokumenten Sammlung mit DocumentDB zu bekommen)

+0

Können Sie ein Beispiel der abgefragten Daten posten? Ich schätze Benutzer. Das ist nicht vergleichbar. Bist du sicher, dass es keine Saiten sind? –

+0

{ "lat": -65,6583190150559, "lon": -74,98864685185254, "Alter": 45,79291892424226, "cat": 32, "id": "f6a82cae-8f57-a9a4-d741-6c9054b2c4ec" } – user2402622

+0

die nicht range-indiziert sind? Vielleicht sollte ich spezielle Optionen hinzufügen? Ich verwende nodejs require ('documentdb'). DocumentClient, Optionen: {masterKey: {authKey}} – user2402622

Antwort

3

Wenn man sich die Blogpost hier: http://azure.microsoft.com/blog/2015/01/27/performance-tips-for-azure-documentdb-part-2/

Indexing Politik Tipp # 3: Geben Sie Bereich Indexpfad Typ für alle Pfade in Bereichsabfragen verwendet

DocumentDB unterstützt derzeit zwei Indexpfadtypen: Hash und Bereich. Die Auswahl eines Indexpfadtyps von Hash ermöglicht effiziente Gleichheit Abfragen. ein Indextyp des Bereichs Wahl Bereichsabfragen ermöglicht (mit >, <, >=, <=).

Es einem Beispiel in C# gibt einen Range-Index hinzuzufügen, den Pfad vergleichbar zu machen, aber es gibt eine ähnliche Funktionalität in den node.js library.

Wenn Sie eine Sammlung erstellen, können Sie die IndexingPolicy durch den Körper-Parameter übergeben kann. die IndexingPolicy ein paar Mitglieder hat. einer von denen die IncludedPaths ist, wo Sie Indizes definieren können.

var policy = { 
    Automatic: true, 
    IndexingMode: 'Lazy', 
    IncludedPaths: [ 
     { 
     IndexType: "Range", 
     Path: "path to be indexed (c.lat)", 
     NempericPrecission: "1", 
     StringPrecission: "1" 
     } 
    ], 
    ExcludedPaths: [] 
} 

client.createCollection(
    '#yourdblink', 
    { 
    id: 10001, 
    indexingPolicy: policy 
    }); 
+0

Wie wählt man einen Indextyp von Range aus NodeJs Anfrage? – user2402622

+0

Sie tun dies, wenn Sie Ihre Indexierungsrichtlinie angeben. Dies muss im Code geschehen, dies ist nicht im Admin-Portal möglich. –

+0

Hinzugefügt zu meiner Antwort. –

1

Die Richtlinie kann im neuen Azure-Portal (https://portal.azure.com) unter (Ihre DocumentDB-Ressource) -> Einstellungen -> Indexrichtlinien geändert werden.

+0

Wie ist das relevant (noch weniger, eine Antwort)? –

+0

@ivan_pozdeev: Es hilft mir! –

Verwandte Themen