查询 CosmosDb 非结构化 JSON
Query CosmosDb Unstructured JSON
CosmosDB 如何查询动态 JSON 中的属性值?
该应用程序允许将 JSON 存储为对象的一组自定义属性。它们被序列化并存储在 CosmosDb 中。例如,这里有两个条目:
{
"id": "ade9f2d6-fff6-4993-8473-a2af40f071f4",
...
"Properties": {
"fn": "Ernest",
"ln": "Hemingway",
"a_book": "The Old Man and the Sea"
},
...
}
和
{
"id": "23cb9d4c-da56-40ec-9fbe-7f5178a92a4f",
...
"Properties": {
"First Name": "Salvador",
"Last Name": "Dali",
"Period": "Surrealism"
},
...
}
如何构造查询以便在 Properties
的值中搜索?
以下两种语法都有效。
SELECT * FROM c where c.Properties["First Name"] = 'Salvador'
SELECT * FROM c where c.Properties.fn = 'Ernest'
I’m looking for something that doesn’t involve the name of the
sub-propety, like SELECT * FROM c WHERE
some_function_here(c.Properties, ‘Ernest’)
也许我明白您的想法,即您想按 Properties
的值而不是名称来过滤文档。如果是这样,您可以在 cosmos db 中使用 UDF。
示例 udf:
function query(Properties,filedValue){
for(var k in Properties){
if(Properties[k] == filedValue)
return true;
}
return false;
}
示例查询:
SELECT c.id FROM c where udf.query(c.Properties,'Ernest')
输出:
这里简单总结一下,Ovi的udf函数如:
function QueryProperties (Properties, filedValue) {
for (var k in Properties) {
if (Properties[k] && Properties[k].toString().toUpperCase().includes(filedValue.toString().toUpperCase()))
return true;
return false;
}
CosmosDB 如何查询动态 JSON 中的属性值?
该应用程序允许将 JSON 存储为对象的一组自定义属性。它们被序列化并存储在 CosmosDb 中。例如,这里有两个条目:
{
"id": "ade9f2d6-fff6-4993-8473-a2af40f071f4",
...
"Properties": {
"fn": "Ernest",
"ln": "Hemingway",
"a_book": "The Old Man and the Sea"
},
...
}
和
{
"id": "23cb9d4c-da56-40ec-9fbe-7f5178a92a4f",
...
"Properties": {
"First Name": "Salvador",
"Last Name": "Dali",
"Period": "Surrealism"
},
...
}
如何构造查询以便在 Properties
的值中搜索?
以下两种语法都有效。
SELECT * FROM c where c.Properties["First Name"] = 'Salvador'
SELECT * FROM c where c.Properties.fn = 'Ernest'
I’m looking for something that doesn’t involve the name of the sub-propety, like SELECT * FROM c WHERE some_function_here(c.Properties, ‘Ernest’)
也许我明白您的想法,即您想按 Properties
的值而不是名称来过滤文档。如果是这样,您可以在 cosmos db 中使用 UDF。
示例 udf:
function query(Properties,filedValue){
for(var k in Properties){
if(Properties[k] == filedValue)
return true;
}
return false;
}
示例查询:
SELECT c.id FROM c where udf.query(c.Properties,'Ernest')
输出:
这里简单总结一下,Ovi的udf函数如:
function QueryProperties (Properties, filedValue) {
for (var k in Properties) {
if (Properties[k] && Properties[k].toString().toUpperCase().includes(filedValue.toString().toUpperCase()))
return true;
return false;
}