2017-03-16 50 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方案的人可能会涉及查询结构(看起来像引用表)。

相关问题