是否有一种方法可以查询cosmos DB在文档中是否存在某个属性,而又不知道该属性确切位于何处,因为它可能出现在不同的位置?
基本上
SELECT *
FROM SomeCollection
WHERE IS_DEFINED("here should be just the prop name w/o any path")
修改:
最初我错过了声明,我在寻找查询级别的解决方案,而不是编写用户定义的存储过程
答案 0 :(得分:1)
您可以创建UDF,该UDF将以递归方式浏览所有对象属性,如果在任何级别上都找到,则返回true。在您的情况下,udf主体看起来可能与此类似
function findRecursive(theObject, searchingProperty){
var result = null;
if(theObject instanceof Array) {
for(var i = 0; i < theObject.length; i++) {
if (findRecursive(theObject[i]){
return true;
}
}
}
else
{
for(var prop in theObject) {
if(prop == searchingProperty) {
return true;
}
if(theObject[prop] instanceof Object || theObject[prop] instanceof Array){
if (findRecursive(theObject[prop])){
return true;
}
}
}
}
return false;
}
UDF应与存储过程注册相同。并且可以从查询中调用。 因此您的选择将类似于下一个
SELECT *
FROM root
WHERE udf.findRecursive(root, "here should be just the prop name w/o any path")
P.S。我没有测试代码,但是您应该了解基本思想