[英]Azure Cosmos DB Query Within not supported
我創建了一個 Azure Function(HTTP 觸發),它使用 Linq 對 Cosmos DB 運行空間查詢。它返回幾何多邊形邊界內的岩石元素。
運行它時,出現以下錯誤:
Exception while executing function: example 發生一個或多個錯誤。 (Method 'Within' is not supported., Windows/10.0.14393 documentdb.netcore-sdk/2.11.6) Method 'Within' is not supported., Windows/10.0.14393 documentdb.netcore-sdk/2.11.6
我檢查過我使用的是所有最新的 NuGet 庫版本。 有人可以提示我還有什么要檢查的嗎? 這是代碼:
public static class Example
{
[FunctionName("example")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "example")] HttpRequest req,
[CosmosDB(
databaseName: "a",
collectionName: "b",
ConnectionStringSetting = "CosmosDBConnection")]
DocumentClient client,
ILogger log)
{
log.LogInformation($"GetRockLocationsSpatial for coordinates");
Uri collectionUri = UriFactory.CreateDocumentCollectionUri("a", "b");
Polygon rectangularArea = new Polygon(
new[]
{
new LinearRing(new [] {
new Position(100, 50),
new Position(130, 50),
new Position(130, 40),
new Position(100, 40),
new Position(100, 50)
})
});
var rocks =client.CreateDocumentQuery<RockLocationDocument>(collectionUri).Where(a => a.location.Within(rectangularArea)).AsEnumerable();
foreach (RockLocationDocument rock in rocks)
{
Console.WriteLine("\t" + rock);
}
return new OkObjectResult(JsonConvert.SerializeObject(rocks));
}
}
}
我不確定是什么原因導致您的錯誤。 但是我可以用你的代碼得到結果。 你可以按照這個試試。
RockLocationDocument.cs
using Microsoft.Azure.Documents.Spatial;
namespace example
{
public class RockLocationDocument
{
public string id { get; set; }
public Point location { get; set; }
}
}
函數.cs
我在CreateDocumentQuery
方法中傳遞了 FeedOption。
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Spatial;
using System.Linq;
namespace example
{
public static class Example
{
[FunctionName("example")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "example")] HttpRequest req,
[CosmosDB(
databaseName: "Test",
collectionName: "site",
ConnectionStringSetting = "sogo_DOCUMENTDB")]
DocumentClient client,
ILogger log)
{
log.LogInformation($"GetRockLocationsSpatial for coordinates");
Uri collectionUri = UriFactory.CreateDocumentCollectionUri("Test", "site");
Polygon rectangularArea = new Polygon(
new[]
{
new LinearRing(new [] {
new Position(100, 50),
new Position(130, 50),
new Position(130, 40),
new Position(100, 40),
new Position(100, 50)
})
});
var rocks =client.CreateDocumentQuery<RockLocationDocument>(collectionUri,new FeedOptions { EnableCrossPartitionQuery = true }).Where(a => a.location.Within(rectangularArea)).AsEnumerable();
foreach (RockLocationDocument rock in rocks)
{
Console.WriteLine("\t" + JsonConvert.SerializeObject(rock));
}
return new OkObjectResult(JsonConvert.SerializeObject(rocks));
}
}
}
圖書館:
使用postman測試:
希望這可以幫到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.