【问题标题】:Cosmos DB query Error with Code:SC1001 While using DistinctCosmos DB 查询错误,代码:SC1001 使用 Distinct 时
【发布时间】:2019-06-29 23:29:36
【问题描述】:

我正在尝试通过 documentClientHelper 查询 cosmos。我的查询在查询资源管理器中运行良好,但使用带有参数的相同查询,在连接处抛出错误。

错误命中为 -

错误

Microsoft.Azure.DocumentDB.Core:消息: {"errors":[{"severity":"Error","location":{"start":428,"end":432},"code":"SC1001","message":"语法 错误,'join' 附近的语法不正确。"}]}

我的查询如下:

    SELECT 
    c.itemCode,c.itemType,c.name,r    
    FROM Products c join r in c.rates     
    WHERE (ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND (c.itemCode = "0600160")     
    ORDER BY c.name

以下查询在以下部分失败:

var queryText = "SELECT 
        c.itemCode,c.itemType,c.name,r    
        FROM Products c join r in c.rates     
        WHERE (ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND (c.itemCode = "0600160")     
        ORDER BY c.name";
var querySpec = new SqlQuerySpec(queryText);

 var query = documentClient.CreateDocumentQuery<Product>(collectionUri, querySpec, feedOptions).AsDocumentQuery();
   var response = await DocumentClientHelper.ExecuteWithRetries(async () => await query.ExecuteNextAsync<Product>());

【问题讨论】:

  • 您已经展示了有效的查询,但您还没有展示您的代码不起作用的地方。请编辑您的问题以表明这一点。
  • 如果您认为我的回答对您有帮助,可以将其标记为已回答。非常感谢。

标签: azure-cosmosdb-sqlapi


【解决方案1】:

根据我的测试,这两种方法都可以正常工作。

样本数据:

[
    {
        "name": "aa",
        "rates": [
            {
                "branchCodes": [
                    80171,
                    80172,
                    80170
                ]
            }
        ]
    },
    {
        "name": "aa",
        "rates": [
            {
                "branchCodes": [
                    80170
                ]
            }
        ]
    },
    {
        "name": "aa",
        "rates": [
            {
                "branchCodes": [
                    80172
                ]
            }
        ]
    }
]

在门户中查询 sql:

SELECT 
    c.itemCode,c.itemType,c.name,r    
    FROM Products c join r in c.rates     
    WHERE (ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND (c.name = "aa")     
    ORDER BY c.name

带有SqlQuerySpec的SDK代码

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using System;
using System.Linq;


namespace JayGongDocumentDB.module
{
    class QueryWithSqlParam
    {
        private static readonly string endpointUrl = "https://***.documents.azure.com:443/";
        private static readonly string authorizationKey = "***";
        private static readonly string databaseId = "db";
        private static readonly string collectionId = "coll";

        private static DocumentClient client;

        public static async void QueryTest()

        {
            client = new DocumentClient(new Uri(endpointUrl), authorizationKey);
            var uri = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);

            String sql = "SELECT c.name,r " +
                            "FROM Products c join r in c.rates "+
            " WHERE(ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND(c.name = \"aa\") " +
            " ORDER BY c.name ";

            IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
                                                uri,
                                                new SqlQuerySpec
                                                {
                                                    QueryText = sql
                                                });

            foreach (Pojo p in queryable)
            {
                Console.WriteLine("\nRead {0}", p);
            }
        }
    }

    class Pojo : Document
    {
        public string id { get; set; }
        public string name { get; set; }
    }

}

【讨论】:

  • 如果您认为我的回答对您有帮助,可以将其标记为已回答。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
相关资源
最近更新 更多