У меня есть коллекция, в которой есть 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.info("Doc Found");
} else {
console.info("Doc not Found");
}
});
}
}
есть ли способ получить документы без передачи PartitionKey?
Согласно предложению ur в чате, я должен получить все документы, обновить свойства, затем снова сохранить каждый ключ раздела документов, и он работает таким образом. @ JayGong
Большой! Вы можете отметить ответ для справки других. Спасибо


If the collection the stored procedure is registered against is a single-partition collection, then the transaction is scoped to all the documents within the collection. If the collection is partitioned, then stored procedures are executed in the transaction scope of a single partition key. Each stored procedure execution must then include a partition key value corresponding to the scope the transaction must run under.
Вы можете обратиться к описанию выше, в котором упоминается здесь.
Невозможно избежать вышеуказанного правила, установив ключ раздела на Undefined.Value. Вы должны предоставить ключ раздела при выполнении хранимой процедуры в многораздельной коллекции.
is there anyway so that I can fetch the documents without passing the PartitionKey?
Вы можете установить EnableCrossPartitionQuery на true в параметре FeedOptions при выполнении запроса sql. (Имеет узкое место в производительности).
Надеюсь, это поможет тебе.
не нашел переопределенного метода для ExecuteStoredProcedureAsync, который принимает FeedOptions. мне нужно передать EnableCrossPartitionQuery значение true в requestOptions хранимой процедуры? @jay Gong
@SatyaraySingh нет, EnableCrossPartitionQuery - это одно из свойств в FeedOptions, а не RequestOptions. Итак, вы все равно должны предоставить ключ раздела для выполнения хранимой процедуры.
в классе DocumentClient есть 4 метода переопределения ExecuteStoredProcedureAsync для выполнения хранимой процедуры, но ни у одного из них нет FeedOptions в качестве параметров. это просто означает, что я не могу сделать это в магазине? @jay Gong
@SatyaraySingh Да. у вас нет способов получить ключ раздела?
Все документы, которые я пытаюсь получить, имеют другой ключ раздела. Я думаю, мне нужно получить весь документ в коде, а затем обновить его, после чего я сохраню его индивидуально. @jay Gong
@SatyaraySingh Давай поговорим в этом чате: chat.stackoverflow.com/rooms/169914/jay-satyaray-singh
@SatyaraySingh Извините за сообщение о задержке, пожалуйста, проверьте чат еще раз .Thx.
@JayGong есть ли способ создать неразмеченную коллекцию? и, кстати, ссылка больше не действительна :(
@fascynacja Несомненно, вам нужно создавать неразмеченную коллекцию с помощью sdk, а не на портале. Я только что искал, но не могу найти ни одного утверждения в теге создания cosmos db на портале. Я помню, что там есть предложение для вас. В любом случае, сделайте это в sdk. Не устанавливайте ключ раздела при создании коллекции в sdk.
Привет, есть обновления?