用于更新所有项目字段的 Azure CosmosDB 存储过程
Azure CosmosDB stored procedure to update all items' field
假设我们有一个装有以下物品的容器
{
location:CA,
bool: false
}
{
location:CA,
bool: false
}
{
location:CA,
bool: false
}
我们如何编写一个存储过程来查询所有项目并将所有项目的 bool 字段从 false 更新为 true?我还没有找到任何参考资料,我知道 CosmosDB 存储过程只支持查询,不支持更新或删除。
此存储过程代码:
// SAMPLE STORED PROCEDURE
function sample() {
var collection = getContext().getCollection();
// Query all documents in one logic partition
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT * FROM root r',
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
feed.forEach(element => {
element.bool = true;
collection.replaceDocument(element._self, element,function (err){
if (err) throw err;
})
})
var response = getContext().getResponse();
response.setBody("replace success");
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
执行存储过程:
顺便说一句,您的分区键应该是 /location
。
假设我们有一个装有以下物品的容器
{
location:CA,
bool: false
}
{
location:CA,
bool: false
}
{
location:CA,
bool: false
}
我们如何编写一个存储过程来查询所有项目并将所有项目的 bool 字段从 false 更新为 true?我还没有找到任何参考资料,我知道 CosmosDB 存储过程只支持查询,不支持更新或删除。
此存储过程代码:
// SAMPLE STORED PROCEDURE
function sample() {
var collection = getContext().getCollection();
// Query all documents in one logic partition
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT * FROM root r',
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
feed.forEach(element => {
element.bool = true;
collection.replaceDocument(element._self, element,function (err){
if (err) throw err;
})
})
var response = getContext().getResponse();
response.setBody("replace success");
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
执行存储过程:
顺便说一句,您的分区键应该是 /location
。