我一直在使用JavaScript API(https://docs.microsoft.com/en-us/azure/cosmos-db/programming#javascript-language-integrated-query-api)在Azure Cosmos DB中的存储过程中观察到一些奇怪的行为
假定数据库中存在一个带有body.id ='---'的文档,则下面的过程可以正确地返回该文档。但是,如果我注释“ return found”行,并用“ if(1 == 1)”取消注释行,则存储过程将返回空结果。我尝试将其更改为if(found){return found;} else {return false;}'-相同的空输出。同样,如果我写'found = found &&(1 == 1);',也会发生同样的情况。在'let found = c.body.id!= null && c.body.id == t;'之后
这是Javascript错误还是我做错了什么?
// SAMPLE STORED PROCEDURE
function sample() {
__.filter(c=>{
//return true;
let t = "---";
let found = c.body.id != null && c.body.id ==t;
return found; <---
//if (1==1){
// return found;
//}
}
, {pageSize: -1},
(a, b, c)=>{
__.response.setBody(b);
return;
});
}
答案 0 :(得分:0)
我会重现您的问题。
以下JavaScript构造未针对Azure进行优化 Cosmos DB索引:
控制流(例如,是否,for,while)函数调用
根据doc中的语句,如果不建议在predicateFunction
中使用if。
您可以按return expression(e.g. x.isMetadata === true);