本文介绍了带/不带"ORDER BY&qot;的CosmosDB SQL查询返回不同数量的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从我的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中的主要错误吗?

推荐答案

我认为您的问题与文档中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"
    }
]

与上述文档相同,您可以看到:

项目名称%1%2%3正常。

itemName%4是对象。

itemName%5是数组。

itemName%6为""。

未定义itemName%7。

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

itemName%4%5%7未显示。所以我认为obj、数组和未定义的值不能用正常的字符串值进行排序。这是您出现问题的原因。

希望它能帮助您。

这篇关于带/不带&quot;ORDER BY&qot;的CosmosDB SQL查询返回不同数量的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-21 17:24