public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "sites/state")] Query message, [CosmosDB(ConnectionStringSetting = "CosmosDBConnectionString")] DocumentClient client, ILogger log) { // Validate input var validationResult = new QueryValidator().Validate(message); if (!validationResult.IsValid) { return(new BadRequestObjectResult(validationResult.Errors.Select(e => new { Field = e.PropertyName, Error = e.ErrorMessage }))); } log.LogInformation("Finding points at the requested distance."); //Query the database to find the parking bays Uri collectionUri = UriFactory.CreateDocumentCollectionUri("parkingdb", "sitesstate"); // The distance is in meters according to https://stackoverflow.com/questions/54453190/what-units-does-st-distance-return var distance = message.Distance ?? 1000; // From http://dontcodetired.com/blog/post/Reading-Azure-Cosmos-DB-Data-In-Azure-Functions and // https://docs.microsoft.com/en-us/sandbox/functions-recipes/cosmos-db?tabs=csharp IDocumentQuery <SiteState> query = client.CreateDocumentQuery <SiteState>(collectionUri, // new FeedOptions() { EnableCrossPartitionQuery = true }) //https://dontpaniclabs.com/blog/post/2017/09/07/getting-started-azure-cosmos-db-part-4-partition-keys/ //https://www.lytzen.name/2016/12/06/find-docs-with-no-partitionkey-in-azure.html new FeedOptions() { PartitionKey = new PartitionKey(null) }) //Undefined.Value) }) .Where(siteState => siteState.RecordState != SiteState.EntityState.Deleted && siteState.Location.Distance(new Point(message.Longitude.Value, message.Latitude.Value)) < distance) .AsDocumentQuery(); // More of the SDK https://joonasw.net/view/exploring-cosmos-db-sdk-v3 var result = await query.ToListAsync(); return(new OkObjectResult(result)); }