我有很多问题:)
我已经开始使用Cosmos DB(SQL API)。喜欢它!
但是我正在努力寻找构建和管理代码的最佳方法。我正在使用Visual Studio。
这是一些代码,我将基于以下4个javascript函数提出问题:
constructor
在我的解决方案中,这4个函数位于4个不同的.js文件中。我会将前三个作为自己的用户定义函数部署在我的集合中。最后,我将其部署为存储过程。
我的应用程序将执行“ processYay”存储过程以执行某些操作。 UDF支持。
问题:
如果答案是“ nope”,“ nope”和“ nope”,则似乎还有另一种解决方案:在存储过程本身内部定义函数。它将完全像这样工作:
function createYayBase(something) {
// UDF
return {
pk: "Yay",
id: "Ptr=" + something
};
}
function createYayDoc(whatever, something) {
// UDF
var o = createYayBase(something);
o.Message = whatever;
return o;
}
function validateYayDoc(doc) {
// UDF
if (doc.pk !== "Yay") { throw new Error("non-Yay! :("); }
}
function processYay(val) {
// stored procedure
var doc = CreateYayDoc(val, "Rec");
validateYayDoc(doc);
...createDocument(selflink, doc, ...);
}
但是然后...
如何重用代码?
我的JavaScript位于.NET类库中。我很喜欢“ #include”技巧:)。我会与webpack等一起入侵吗?
或者...人们使用了一些可接受的方法吗?
答案 0 :(得分:0)
1。是否可以直接从存储过程调用UDF,类似于上面在“ processYay”中所做的操作?还是只能以 查询的一部分?
2。是否可以像在“ createYayDoc”中那样从另一个UDF调用UDF?
3。UDF是否可以“抛出”或在这种情况下被认为是副作用?
答案是否定的。您可以在官方UDF doc中找到以下明确声明。
用户定义函数(UDF)用于扩展Azure Cosmos DB SQL查询语言语法并实现自定义业务逻辑。他们 只能从内部查询中调用。他们无权访问 上下文对象,旨在用作纯计算JavaScript。 因此,UDF可以在Cosmos DB的辅助副本上运行 服务。
我认为您对user defined function
的应用场景有一些误解。它只是帮助您根据自定义业务逻辑处理查询的结果集。它不能由存储过程调用,也不能调用其他方法,甚至不能操纵数据库。
存储过程只是在服务器端运行的JS代码脚本。它可以帮助您执行一些自定义数据库操作,甚至是批量操作。它是关于特殊需求的,因此您不能认为它是整个项目中的普通功能。
考虑到可重用性,您可以将JS代码中的一些关键变量作为参数传递给存储过程。
希望它对您有帮助。