Я пытался выполнить ваше требование с помощью хранимой процедуры, пожалуйста, обратитесь к моему SP-коду:
function sample(idArray) {
var collection = getContext().getCollection();
var length = idArray.length;
var sqlQuery = {
"query": 'SELECT count(c.id) as cnt, f.facilityName from c join f in c.facilities '+
'where array_contains( @idArray,c.id,true) ' +
'AND c.entityType = "ServiceInformationFacility" group by f.facilityName',
"parameters": [
{"name": "@idArray", "value": idArray}
]
}
// Query documents and take 1st item.
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
sqlQuery,
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var response = getContext().getResponse();
var returenArray = [];
for(var i=0;i<feed.length;i++){
if(feed[i].cnt==length)
returenArray.push(feed[i])
}
response.setBody(returenArray);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
Входной параметр:
["6ECF4568-CB0E-4E11-A5CD-1206638F9C39","2ECF4568-CB0E-4E11-A5CD-1206638F9C39"]
Получить вывод:
ОБНОВЛЕНИЯ:
Итак, если ваша коллекция разделена, возможно, хранимая процедура не подходит для вас, поскольку для выполнения SP необходим ключ раздела. Пожалуйста, обратитесь к моим подробным объяснениям в этой теме: Удаление документов из Cosmos с использованием запроса без указания ключа раздела
На самом деле , в моем приведенном выше sp-коде нет сложной логики c. Это просто l oop результат sql и попытка найти, который object.count
равен idArray.length
, что означает, что object.facilityName существует во всех документы.
Итак, вам не нужно использовать SP, вы можете использовать любой маленький кусочек кода для обработки логики c, которую я описал выше.