2017-03-16 83 views
0
運行時,下面的查詢它的返回記錄集從

當它不應該|時,查詢返回結果DocumentDB

SELECT * 
FROM Families f 
WHERE f.id = "AndersenFamily" 

我在C#中也嘗試過,得到了相同的結果:

query = client.CreateDocumentQuery<Family>(collectionLink, new SqlQuerySpec 
      { 
       QueryText = "SELECT * FROM Families f WHERE (f.id = @name)", 
       Parameters = new SqlParameterCollection() { 
          new SqlParameter("@name", "AndersenFamily") 
        } 
      }); 

什麼是「家庭」的意義是什麼? ASFAIK它不是數據庫名稱,集合名稱或任何文檔名稱,那麼它爲什麼返回結果?

我也嘗試用一些不同的詞取代「家庭」,我仍然得到了結果。

你可以看到這裏的代碼https://docs.microsoft.com/en-us/azure/documentdb/documentdb-sql-query

+0

您是否在從C#運行查詢時,或僅在操作系統中看到?如果它在操場上,這可能是一個特定於操場的方面,與C#無關。 (我強烈懷疑這與C#或.NET無關,老實說。) –

+0

@Skeet它是用C#代碼。我已經更新了這個問題。 – JerryGoyal

+0

嗯。鑑於操場上的行爲,我仍然認爲這只是*一個DocumentDb問題,.NET和C#的知識無關緊要。這個文檔的說法並不十分清楚 - 儘管它確實表示在大多數情況下FROM子句是可選的。 –

回答

1

DocumentDB支持使用SQL語法查詢,但因爲它實際上是一個NoSQL的存儲,表的概念並不存在。

在DocumentDB上構建SQL查詢時,可以包含集合名稱和別名的FROM子句(可選)specifies the source

對於您的示例,Families充當集合名稱,f充當別名。如果您針對單個集合(這是最常見的情況)創建查詢,則不需要指定集合名稱,只需使用對集合內容(文檔)的引用,如下所示:

SELECT * FROM f WHERE f.id = "AndersenFamily"

我的意見是,Families引用是因爲來自SQL方案的人可能會涉及查詢結構(看起來像引用表)。