我是NoSQL的新手,并且在文档中喋喋不休。
我有一个MarkLogic数据库实例,其中填充了我感兴趣的JSON文档。我已经执行了一个基本的搜索,并有一个SearchHandle,它将为我提供匹配的URI。
大
我想评估那些JSON文档中某些特定键的值
在SQL中,这是一个简单的SELECT,其中='somevalue'。
在这里,我很难找到真正实现这一目标的正确方法。我设置了我的JSONDocumentManager,建立了我的搜索条件标准来获取我的文档,然后我将结果返回给我的StringHandle。
我现在需要解析扁平的JSON字符串以查找我的密钥吗?
我是否需要通过JacksonHandle绑定将整个JSON文档转换为POJO,以便通过URI查找文档中的单个值?
我情不自禁地认为这可能是我在文档中没有发现的单行...
答案 0 :(得分:1)
Raevik:
与SQL SELECT(专为结果集设计并仅为查询过滤到一行并投影一列而返回单个值)类似,MarkLogic查询响应旨在从非常大的数据中返回多个文档,结构或值集。与在SQL中一样,单个值是查询的特殊情况,该查询限定一个文档并提取一个值。
定义该查询的最简单方法可能是使用“按示例查询”提取。请参阅:
http://docs.marklogic.com/guide/search-dev/qbe#id_54044
您还可以使用Admin UI在文档中的JSON键上定义范围索引:
http://docs.marklogic.com/guide/rest-dev/search#id_95526
然后使用QueryManager.values()方法从范围索引中提取一个值。
MarkLogic 7确实支持SPARQL,它具有获得单一答案的语法,因此通过将数据保存为三元组,可以进行这些查询。
为了完整性:您还可以使用StructuredQueryBuilder过滤JSON键,并使用JSON键指定值查询,如(未经测试):
StructuredQuery queryDef = queryBldr.value(queryBldr.jsonKey("key"),"value");
或使用“按示例查询”(未经测试):
StructuredQuery queryDef = newRawQueryByExampleDefinition(new StringHandle("{\"$query\":{\"key\":\"value\"}}"));
有关这些过滤功能的更多详细信息,请参阅:
http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/StructuredQueryBuilder.html http://docs.marklogic.com/guide/search-dev/qbe
顺便说一句,Jackson不仅可以用于数据绑定到POJO,还可以用于对JSON的ad hoc DOM访问。
希望有所帮助。
答案 1 :(得分:0)
MarkLogic支持sortof是xquery
的堂兄的SQL
:
for $d in doc("depts.xml")//deptno
let $e := doc("emps.xml")//employee[deptno = $d]
where count($e) >= 10
order by avg($e/salary) descending
return
<big-dept>
{ $d,
<headcount>{count($e)}</headcount>,
<avgsal>{avg($e/salary)}</avgsal>
}
</big-dept>