首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空MarkLogic数组的Javascript查询

空MarkLogic数组的Javascript查询
EN

Stack Overflow用户
提问于 2015-09-11 15:27:19
回答 1查看 446关注 0票数 4

我正在处理一个查询,它将过滤节点为空JSON数组的文档,如下所示(Output属性):

代码语言:javascript
复制
{
    "Id": "0aec6b50-03ff-48c9-ac35-1b5e7640a892", 
    "Input": "00000000-0000-0000-0000-000000000000", 
    "Output": [
    ]
}

现在,我使用这个查询:

代码语言:javascript
复制
cts.orQuery([
        cts.notQuery(cts.jsonPropertyValueQuery('Input','00000000-0000-0000-0000-000000000000')), 
            cts.jsonPropertyValueQuery('Output', '*', 'wildcarded')
    ])

它正在过滤所有具有空(空GUID) Input字段的文档,并且应该(但不是)过滤具有空(空数组) Output的文档。

它使用的是文档:

代码语言:javascript
复制
{
    "Id": "0aec6b50-03ff-48c9-ac35-1b5e7640a892", 
    "Input": "00000000-0000-0000-0000-000000000000", 
    "Output": ""
}

我认为这是因为空数组对于MarkLogic是一个值。有没有人有过类似的问题?如何查询空的JSON数组?

编辑:

非空消息(应返回)如下所示:

代码语言:javascript
复制
{
    "Id": "0aec6b50-03ff-48c9-ac35-1b5e7640a892", 
    "Input": "00000000-0000-0000-0000-000000000000", 
    "Output": [
        "91ad81fe-9c82-4090-b6a9-a918f901de46"
    ]
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-18 04:09:12

cts.jsonPropertyValueQuery('Output', '*', 'wildcarded')将匹配在通用索引中转换为空字符串的任何Output属性值。这意味着它匹配:

查找具有(独占)非空值的Output属性的最简单方法是,您可以将上面的内容与对空字符串进行否定搜索相结合:

代码语言:javascript
复制
cts.andQuery([
  cts.jsonPropertyValueQuery('Output', '*', 'wildcarded'),
  cts.notQuery(
    cts.jsonPropertyValueQuery('Output', '')
  )
])

但请注意,这也将排除具有空字符串数组和非空字符串值的输出属性。若要查找至少具有一个非空字符串的输出属性(因此还应混合使用空值和非空值),应应用范围索引,并使用:

代码语言:javascript
复制
cts.jsonPropertyRange('Output', '!=', '')

这将忽略null和空数组。

哈!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32517890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档