Как получить данные из Azure Cosmos Db с помощью Core (SQL) API

Я обнаружил проект ggub BSFetchedResultsController github , который является подклассом NSFetchResultsController, который делает то, что Мартин предложил в том, что он сортируется в памяти с использованием произвольного дескриптора сортировки, кроме того, он также регистрирует изменения в контексте и вычисляет любые индекс снова изменяется с учетом произвольного дескриптора сортировки. В целом очень впечатляющий подвиг! Я успешно использовал его для сортировки по расстоянию следующим образом:

BSFetchedResultsController* fetchedResultsController = [[BSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];

//  create a location to compare distance to, e.g. current location
CLLocation* sourceLocation = [[CLLocation alloc] initWithLatitude:55.87595153937809 longitude:-4.2578177698913855];

// compare the distance from both to the source location
fetchedResultsController.postFetchComparator= ^(id a, id b) {
    Venue* v1 = (Venue*)a;
    Venue* v2 = (Venue*)b;

    double d1 = [v1.coreLocation distanceFromLocation:sourceLocation];
    double d2 = [v2.coreLocation distanceFromLocation:sourceLocation];

    return [@(d1) compare:@(d2)];
};

NSError *error = nil;
if (![fetchedResultsController performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}

С момента своего старого проекта у него нет ARC, поэтому, когда вы включаете два файла, помните, чтобы отмечать .m с помощью флагов компилятора - fno-objc-arc в Target, Build Phases. Также имейте в виду, что разработчик считает, что код не готов к производству, поэтому обязательно используйте соответствующее тестирование.

В моем коде выше у меня есть переходное свойство coreLocation на моем подклассе объекта управляемого объекта, вы можете видеть как это сделать здесь . Кроме того, расчет расстояний неэффективен, вам может понадобиться кэшировать расстояние в объекте, а не переучитывать его при каждом сравнении.

Наконец, похоже, что этот проект возник из-за вопроса о создателе Daniel Thorpe's Stackoverflow он остался без ответа, заставив его решить проблему и сам отправил единственный ответ, поэтому я думаю, что если вы найдете полезный его проект, вы можете любезно опубликовать свой пост , как и я.

0
задан NicoTing 26 February 2019 в 07:48
поделиться

1 ответ

У меня возникает ошибка «Для этой операции должно быть указано значение PartitionKey» при запуске функции

В соответствии с этим сообщением об ошибке, я думаю, вам нужно установить partitionKey в вашем function.json файле. Пожалуйста, обратитесь к этому списку поддерживаемых свойств .

PartitionKey Определяет значение ключа раздела для поиска. Может включать параметры привязки.

Вот пример:

{
    "name": "inputDocument",
    "type": "documentDB",
    "databaseName": "MyDatabase",
    "collectionName": "MyCollection",
    "id" : "{queueTrigger}",
    "partitionKey": "{partition key value}",
    "connection": "MyAccount_COSMOSDB",
    "direction": "in"
}
0
ответ дан Jay Gong 26 February 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: