2017-06-13 27 views
0

我在CosmosDB上有幾個JSON文檔,其中一個子節點是以下列格式表示日期和時間的字符串「yyyy-mm-dd HH: MM:SS」。我想知道是否可以使用查詢資源管理器來獲取日期時間在特定範圍內的所有文檔。我試圖通過字符串比較來做到這一點,但我不知道該怎麼做。我嘗試了CompareTo函數,但我會得到不正確的語法錯誤。Azure的CosmosDB:查詢資源管理器基於比較時間戳獲取文檔作爲字符串

這是我的每個文件的樣子:

{ "Blocks": [...] 
    } 

由於查詢探險合併所有文件一起,這是它給了我從執行這個查詢「從c。選擇*」,外部列表含多個詞典:

[ 
    {"Blocks": [...]}, 
    {"Blocks": [...]}, 
    {"Blocks": [...]}, 
    ... 
    ] 

塊值是如下所示的列表:

[ 
    {"StartDateTime" : "2017-06-12 16:00:00", ...}, 
    {"StartDateTime" : "2017-06-11 11:00:00", ...}, 
    {"StartDateTime" : "2017-06-12 13:00:00", ...}, 
    ... 
    ] 

內部列表中的每個元素都是一個字典,其中一個鍵爲「StartDateTime」,其值爲上面指定格式的字符串。

我的目標是能夠查詢該內部列表中StartDateTime> = DateTimeStringLower和StartDateTime的值的所有項目,其中DateTimeStringUpper爲<。理想情況下,返回的文件應該是這個樣子:

{"Blocks": 
    [ 
     {"StartDateTime" : "2017-06-12 16:00:00", ...}, 
     {"StartDateTime" : "2017-06-11 11:00:00", ...}, 
     {"StartDateTime" : "2017-06-12 13:00:00", ...}, 
    ... 
    ] 
    } 

但我可以解決它,如果它不完全一樣的。

我已經試過此查詢Select * from d in c.Blocks Where d.StartDateTime.CompareTo("2017-06-12") >= 0但它給我的「(」。一個語法錯誤,這是否命令甚至超過全力以赴塊?

什麼是處理這個? 感謝。

的正確方法

PS:只是一個側面的問題,一旦我找出正確的查詢,我可以在Python中使用它嗎?我有這樣的代碼行docs = client.ReadDocuments(coll_link)。有沒有辦法用python代替文檔中的查詢獲取部分文檔?在Azure中的請求單元成本更低

回答

1

如果我理解你[R要求正確地,下面的查詢應該做的工作:

SELECT VALUE Block 
    FROM c 
    JOIN Block IN c.Blocks 
WHERE Block.StartDateTime >= '2017-06-12' 
    AND Block.StartDateTime < '2017-06-13' 

它會產生一個結果,它看起來像

[ 
    { "StartDateTime": "2017-06-12 16:00:00", ... }, 
    { "StartDateTime": "2017-06-12 13:00:00", ... }, 
    ... 
] 

對於比較正常工作,您需要在您的收藏能範圍指標,至少爲比較財產。請參閱索引配置示例here

+0

我得到以下錯誤使用該查詢:「一個無效的查詢已指定與篩選器不是範圍索引的路徑(s),請考慮添加允許掃描標頭請求中。 –

+0

另外我編輯了什麼問題,並寫了我想要的結果。 –

+0

我用'='而不是比較器測試了你的查詢,並且它可以工作。看起來你不能使用'>'或'<'來比較字符串。 –

相關問題