使用SQL检查CosmosDB JSON中是否存在字段-nodeJS

JDT*_*JDT 4 sql json azure azure-cosmosdb

我正在使用Azure CosmosDB存储文档(JSON)。

我试图查询包含该字段的所有文档,"abc"而不返回不包含该字段的文档"abc"。例如,返回下面的第一个对象,而不是第二个

{
    "abc": "123"
}

{
    "jkl": "098"
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下代码:

client.queryDocuments(
collectionUrl,
`SELECT r.id, r.authToken.instagram,r.userName FROM root r WHERE r.abc`
)
Run Code Online (Sandbox Code Playgroud)

我假设上面会检查是否abc存在类似于if (r.abc) {}

我尝试使用 WHERE r.abc IS NOT NULL

提前致谢

A.R*_*wan 34

如果您想知道某个字段是否存在,您应该使用 IS_DEFINED("FieldName") 如果您想知道该字段的值是否具有 FieldName != null 或 FieldName <> null (显然)的值

我在生产中使用它的变体:

SELECT c.FieldName
FROM c 
WHERE IS_DEFINED(c.FieldName)
Run Code Online (Sandbox Code Playgroud)

  • 当序列化忽略空字段时,IS_DEFINED 对于查找未填充某些字段的文档特别有用。在这种情况下,IS_NULL 不起作用。 (2认同)

Rad*_*spy 18

NOT在 SQL 查询中添加要求反的运算符。

SELECT r.id, r.authToken.instagram,r.userName 
FROM root r 
WHERE NOT IS_DEFINED(r.abc)
Run Code Online (Sandbox Code Playgroud)

包括 FieldNameabc不存在的所有条目。


Nic*_*sas 5

您需要做的就是将查询更改为

SELECT r.id, r.authToken.instagram,r.userName FROM root r WHERE r.abc != null

要么

SELECT r.id, r.authToken.instagram,r.userName FROM root r WHERE r.abc <> null

两家运营商都可以工作(在数据浏览器上测试)

  • 我在预定义函数中找不到任何东西。您必须自己编写一个UDF。如果值为null,则即使IS_DEFINED()也将返回。 (2认同)