带/不带“ORDER BY”的CosmosDB sql查询返回不同数量的项

时间:2018-05-16 16:48:36

标签: sql azure azure-cosmosdb

我正在从我的Web服务查询cosmosdb sql数据库。只需致电:

//Microsoft.Azure.Documents.Client, Version=1.18.0.0
DocumentClient.CreateDocumentQuery<dynamic>(collection, query,
                    new FeedOptions {EnableCrossPartitionQuery = true}).AsEnumerable();

现在我的查询如下:

SELECT c.Name, c.Grade
FROM c
WHERE c.Grade > 10
AND c.Category = "A"
ORDER BY c.Name

我收到1000条参赛作品。现在,如果我删除“ORDER BY”部分,我将获得6000行! 我错过了什么吗?或者这是API中的一个主要错误?

2 个答案:

答案 0 :(得分:3)

我认为您的问题与文档中Name字段的值有关。我在示例文档中测试了多种类型的Name

执行sql:select c.id,c.itemName from c后,结果如下:

[
    {
        "id": "1",
        "itemName": "A"
    },
    {
        "id": "2",
        "itemName": "B"
    },
    {
        "id": "3",
        "itemName": "C"
    },
    {
        "id": "4",
        "itemName": [
            {
                "test": "for test"
            }
        ]
    },
    {
        "id": "5",
        "itemName": {
            "test": "for test"
        }
    },
    {
        "id": "6",
        "itemName": ""
    },
    {
        "id": "7"
    }
]

如上所述,您可以看到:

itemName 1 2 3是正常的。

itemName 4是一个对象。

itemName 5是一个数组。

itemName 6是&#34;&#34;。

itemName 7未定义。

然后执行sql:select c.id,c.itemName from c order by c.itemName,结果如下:

enter image description here

itemName 4 5 7没有显示出来。所以我认为obj,数组和未定义的值不能用正常的字符串值排序。这是你问题的原因。

希望它对你有所帮助。

答案 1 :(得分:1)

应该是

SELECT c.Name, c.Grade FROM c WHERE c.Grade > 10 AND c.Category = "A" order by c.Name

cosmosdb playground 上运行示例查询并检查