Stored procedures 我可以检查唯一性并在Cosmos DB存储过程中编写文档吗
我有一个Cosmos DB存储过程,它可以创建一个新文档(如果它不存在),并返回现有文档或新文档。可以从不同的进程调用该过程。即使多个客户端同时尝试创建文档,我是否可以确保文档只创建一次Stored procedures 我可以检查唯一性并在Cosmos DB存储过程中编写文档吗,stored-procedures,azure-cosmosdb,Stored Procedures,Azure Cosmosdb,我有一个Cosmos DB存储过程,它可以创建一个新文档(如果它不存在),并返回现有文档或新文档。可以从不同的进程调用该过程。即使多个客户端同时尝试创建文档,我是否可以确保文档只创建一次 function createIfNotExists(param1, param2) { var collection = getContext().getCollection(); // Query documents and take 1st item. var query = '
function createIfNotExists(param1, param2) {
var collection = getContext().getCollection();
// Query documents and take 1st item.
var query = 'SELECT * FROM c WHERE c.Param1="' + param1 + '" AND c.Param2="' + param2 + '"';
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
query,
function (err, items, options) {
if (err) throw err;
var response = getContext().getResponse();
if (!items || !items.length) {
var accepted = collection.createDocument(collection.getSelfLink(),
{
Param1: param1,
Param2: param2
},
function (err, itemCreated) {
if (err) throw err;
response.setBody(itemCreated);
});
if (!accepted) throw new Error('Could not create document');
}
else {
response.setBody(items[0]);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
我是否可以确保文档仅创建一次(即使是多次创建)
客户试图同时创建它
function createIfNotExists(param1, param2) {
var collection = getContext().getCollection();
// Query documents and take 1st item.
var query = 'SELECT * FROM c WHERE c.Param1="' + param1 + '" AND c.Param2="' + param2 + '"';
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
query,
function (err, items, options) {
if (err) throw err;
var response = getContext().getResponse();
if (!items || !items.length) {
var accepted = collection.createDocument(collection.getSelfLink(),
{
Param1: param1,
Param2: param2
},
function (err, itemCreated) {
if (err) throw err;
response.setBody(itemCreated);
});
if (!accepted) throw new Error('Could not create document');
}
else {
response.setBody(items[0]);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
海因,关于你的担忧,你可以深入研究这一点,它阐述了宇宙中的酸性物质
在Azure Cosmos DB中,JavaScript运行时托管在数据库中
引擎。因此,在存储过程和
触发器在与数据库会话相同的范围内执行。这
该功能使Azure Cosmos DB能够保证所有用户的ACID属性
作为存储过程或触发器一部分的操作。对于
例子
因此,我认为你的问题的答案是肯定的,因为原子性保证事务中完成的所有操作都被视为一个单独的单元,要么全部提交,要么没有提交
顺便说一句,您也可以在创建集合之前设置一个或多个唯一键,请参阅此