Космос БД Хранимая процедура не выполняется без PartitionKey - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть коллекция, в которой есть PartitionKey. У меня есть созданная хранимая процедура, которая принимает запрос в качестве параметра. в этой хранимой процедуре я извлекаю некоторые документы для обновления, но при извлечении выдает ошибку, в которой говорится, что при использовании метода

укажите PartitionKey
public Task<StoredProcedureResponse<TValue>> ExecuteStoredProcedureAsync<TValue>(Uri storedProcedureUri, [Dynamic(new[] { false, true })] params dynamic[] procedureParams);

при использовании другого метода

public Task<StoredProcedureResponse<TValue>> ExecuteStoredProcedureAsync<TValue>(string storedProcedureLink, RequestOptions options, [Dynamic(new[] { false, true })] params dynamic[] procedureParams);

в этом методе я передаю PartitionKey как

new RequestOptions { PartitionKey = new PartitionKey(Undefined.Value)

при использовании этого RequestOptions в хранимой процедуре нет документа Fetch.

function ABC(query) {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var response = getContext().getResponse();
// Validate input.
if (!query) throw new Error("The query is undefined or null.");

tryQueryAndDelete();

function tryQueryAndDelete(continuation) {
    var requestOptions = { continuation: continuation };

    var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, retrievedDocs, responseOptions) {
        if (err) throw err;

        if (retrievedDocs.length > 0) {
           console.log("Doc Found");
        } else {
           console.log("Doc not Found");

        }
    });
}

}

есть ли в любом случае, чтобы я мог получить документы без передачи ключа PartitionKey?

1 Ответ

0 голосов
/ 27 апреля 2018

Если коллекция, против которой зарегистрирована хранимая процедура, является однораздельный сбор, то транзакция распространяется на все документы в коллекции. Если коллекция разделена, затем хранимые процедуры выполняются в объеме транзакции один раздел ключа. Каждое выполнение хранимой процедуры должно затем включить значение ключа раздела, соответствующее области действия транзакция должна выполняться под.

Вы можете обратиться к описанию выше, в котором упоминается здесь .

Невозможно избежать вышеуказанного правила, установив ключ разделения на Undefined.Value. Вы должны предоставить ключ разделения при выполнении хранимой процедуры в многораздельной коллекции.

так или иначе, чтобы я мог получить документы, не передавая PartitionKey

Вы можете установить EnableCrossPartitionQuery в true в параметре FeedOptions при выполнении запроса sql. (Имеет узкое место в производительности).

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...