2015-02-09 36 views
5

Microsoft Azure文檔BadRequestException已針對非範圍索引的路徑指定了無效查詢。考慮在請求中添加允許掃描標題。DocumentDB - 無法在查詢中比較兩條路徑

我的查詢是:

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

OVER?文件號碼(因爲沒有辦法讓收集與DocumentDB的文件數)

+0

你能發表一個你正在查詢的數據樣本嗎?我猜的用戶.lat不是可比的。你確定他們不是字符串嗎? – 2015-02-09 21:16:41

+0

{ 「LAT」:-65.6583190150559, 「LON」:-74.98864685185254, 「時代」:45.79291892424226, 「貓」:32, 「ID」: 「f6a82cae-8f57-a9a4-d741-6c9054b2c4ec」 } – user2402622 2015-02-09 22:45:56

+0

不是範圍索引?也許我應該添加特殊選項?我使用nodejs require('documentdb')。DocumentClient,選項:{masterKey:{authKey}} – user2402622 2015-02-09 22:46:44

回答

3

如果你看一下博客帖子在這裏: http://azure.microsoft.com/blog/2015/01/27/performance-tips-for-azure-documentdb-part-2/

索引策略提示#3:指定範圍索引路徑鍵入所有路徑 用於範圍查詢

DocumentDB當前支持兩種索引路徑類型:散列和範圍。 選擇哈希的索引路徑類型可啓用高效的相等性 查詢。選擇範圍的指標類型允許範圍查詢(使用 >, <, >=, <=)

它給出了C#爲例,添加一系列指數,使路徑相媲美,但在node.js library.

當類似的功能您創建一個集合,可以通過人體參數傳遞IndexingPolicy該IndexingPolicy有幾個成員。其中之一是IncludedPaths,在這裏你可以定義索引。

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

如何從NodeJs請求中選擇Range的索引類型? – user2402622 2015-02-09 23:54:04

+0

您在指定索引策略時會這樣做。這必須在代碼中完成,它不能在管理門戶中完成。 – 2015-02-10 07:09:57

+0

添加到我的答案。 – 2015-02-10 15:36:26

1

可以在(DocumentDB資源) - >設置 - >索引策略下的新Azure門戶(https://portal.azure.com)中更改策略。

+0

這是如何相關(甚至更少,答案)? – 2016-11-26 12:40:31

+0

@ivan_pozdeev:它幫助我! – 2017-07-16 16:37:40