我是Azure Cosmos DB的新手,由于一些冲突的留档,我正在努力解决这个问题。
我有一个容器,包含JSON数据。
每个JSON文档都有一个名为opcos的根级数组,它可以包含N个GUIDS(通常少于5个)。
这些 opcos GUID 是指作为 ID 或单独文档的子项。
如果父文档链接到子文档,则我需要检查子文档在其 opcos 节点中是否有更多子项。
获取所有相关项目的最佳方式是什么,可能有大约100个相关文档。
我需要将每个文档分开,因此我无法将它们存储为子文档,因为父项和子项之间的链接在多个父项之间是流动的。
我正在寻找一个递归解决方案,我试图在Cosmos DB内实现这一点,因为我假设从Cosmos数据库外运行100个调用会带来所有连接等的性能开销。
欢迎建议,我从另一篇文章中取下一个片段并尝试编辑它,但它立即出错 onvar 上下文 = getContext();
此外,欢迎任何关于调试函数和存储过程的提示。我已经学了15年的TSQL,但这是非常不同的。
当我尝试在 Cosmos DB 中使用函数时,它显示引用错误:
未定义“getContext”
如果我尝试下面的代码
var context = getContext();
var collection = context.getCollection();
function userDefinedFunction(id){
var context = getContext();
var collection = context.getCollection();
var metadataQuery = 'SELECT company.opcos FROM company where company.id in (' + id + ')';
var metadata = collection.queryDocuments(collection.getSelfLink(), metadataQuery, {}, function (err, documents, options) {
if (err) throw new Error('Error: ', + err.message);
if (!documents || !documents.length) {
throw new Error('Unable to find any documents');
} else {
var response = getContext().getResponse();
/*for (var i = 0; i < documents.length; i++) {
var children = documents[i]['$1'].Children;
if (children.length) {
for (var j = 0; j < children.length; j++) {
var child = children[j];
children[j] = GetWikiChildren(child);
}
}
}*/
response.setBody(documents);
}
});
}
答案实际上取决于您的分区策略。
首先,您的udf无法运行,因为UDF没有执行上下文作为其API的一部分。您的函数将运行,但您需要将其创建为存储过程,而不是用户定义的函数。
现在您必须记住,存储过程只能针对单个逻辑分区执行,这是它们的事务范围。只要您在存储过程中传递一个id数组并且您正在操作的文档在同一个分区中,您的技术就会工作。如果不是这样,那么就不可能使用存储的proc(好吧,除非您每个文档都有一个,这在这一点上可能不值得)。
另一方面,您希望参数化在查询中添加id的方式,以防止潜在的sql注入。
问题内容: 我正在使用Hibernate检索特定查询的行数。假设我有一个名为“ Person”的表,其中包含各种列。这些列之一是“名称”。 如果我想获得带有“安德鲁”名字的人数,以下哪种方法最有效?假设某些/全部之间存在性能差异。使用Hibernate / SQL是否有更好的方法? (1)选择所有列 (2)仅选择名称列 (3)在查询中使用Count (4)在查询中的名称列中使用Count 编辑:对
问题内容: 我对PLSQL的更高级主题还是陌生的,因此希望有人可以帮助我。 问题: 我有一个表,其中包含管理员和用户之间发送的消息。该表在同一表的message_id字段中具有带FK的message_parent:如果填充了该字段,则意味着该消息是作为对先前消息的答复而发送的。我需要选择属于同一对话的所有消息并显示它们。可以通过单个查询完成此操作,还是需要一个过程来处理这种逻辑?据我了解,它必须是
问题内容: 我得到一张下表: 如果用户搜索“ 1”,则程序将查看具有“ 1”的,然后它将在“ 5”中得到一个值,然后程序将继续在其中搜索“ 5”,并且将得到“ 3”在中,依此类推。因此它将打印出: 如果用户搜索“ 6”,它将打印出: 如何建立一个查询来做到这一点? 问题答案: 编辑 @leftclickben提到的解决方案也是有效的。我们也可以对它使用存储过程。 我们使用临时表存储输出结果,并且由
问题内容: 我听说过使用以下方法的建议: 从下面的评论中复制:“我正在寻找这样的语句:在MySQL和PostgreSQL中,对于短查询,count()更快,对于长查询,exist(()更快,并且在可能的情况下使用QuerySet [0]将需要第一个元素,并且您要检查它是否存在。但是,当count()更快时,它仅略微更快,因此建议在两者之间进行选择时始终使用exist()。” 问题答案: exist
问题内容: 我有一组按层次结构组织的数据,应该可以增长到任意大小。我需要检索整个树,但是我无法弄清楚如何仅使用SQL来完成。我当前的解决方案是创建一个临时表,并使用递归函数依次查询树的分支,然后将结果存储在临时表中,随后我再次对其进行查询以产生所需的结果。 我的问题是,从本质上讲,我正在执行的联接正确吗?构造一个中间表,然后查询结果。似乎应该有一种使用联接的方法,但是MySQL文档仅涵盖检索有限深
问题内容: JPA 2是否具有运行递归查询的任何机制? 这是我的情况:我有一个实体E,其中包含一个整数字段x。它还可能具有通过@OneToMany映射的E类型的子代。我想做的是通过主键找到一个E,并获取其x的值以及所有后代的x值。有没有办法在单个查询中执行此操作? 我正在使用Hibernate 3.5.3,但我不希望在Hibernate API上没有任何明确的依赖关系。 编辑:根据这一项目,Hib