marklogic,如何在文档属性上创建范围

时间:2015-09-22 19:27:36

标签: node.js marklogic

while

我上面有这些属性的文件。
我想按" PublicationDate"过滤...
我试过" Fields" &安培; "场范围索引"和"元素范围索引",但是我没有找到指定此属性的语法(XML或JSON)?

有谁知道这种语法?

亲切的问候

3 个答案:

答案 0 :(得分:2)

除了提供示例的答案之外,请注意, http://marklogic.com/xdmp/property publicationDate NOT >在你的例子中..所以你的索引配置应该具有每个元素定义的json / basic的命名空间,并且作为xs引用它:QName不应该引用" prop:" ..

试图弄清楚你的索引是否正确?您始终可以从查询控制台尝试SELECT * FROM tbl_name WHERE CONCAT(YEAR(CURDATE()),DATE_FORMAT(b_day,'-%m-%d')) = $date ,并在代码中使用它之前验证您的索引是否符合预期。

答案 1 :(得分:1)

经过多次试验,这似乎工作得很好(MarkLogic 8.0-3):

没有" Field" (其中wmhttp://marklogic.com/xdmp/json/basic):

qb.propertiesFragment(qb.value(qb.element(wm,'publicationDate'),'2015-03-30'))

没问题,但以下产生相同的错误(无元素范围索引......)

qb.propertiesFragment(qb.range(qb.element(wm,'publicationDate'), '>=' ,'2015-03-01'))

使用" Field" (wm:publicationDate,在路径名称空间中有wm,之前没有/vm:properties/ ...)以下似乎工作正常: - )))

  • qb.propertiesFragment(qb.value(qb.field("properties_publicationDate"),'2015-03-30'))
  • qb.propertiesFragment(qb.range(qb.field("properties_publicationDate"), '>=' ,'2015-03-01'))

答案 2 :(得分:0)

我认为您正在寻找cts:properties-query

cts:properties-query(
  cts:element-range-query(
    xs:QName("my:publicationDate"),">",
    current-dateTime() - xs:dayTimeDuration("P1D"))))

此示例假设prop:publicationDate上的范围索引,并且还注意这假设MarkLogic 7或更早版本。在MarkLogic 8中,此查询的名称似乎已更改为cts:properties-fragment-query

在node.js中,使用查询构建器,您可以实现类似的功能:

db.documents.query(
   qb.where(
     qb.fragmentScope('properties'),
     qb.propertiesFragment(
       qb.range('publicationDate', '>', ... )
     )
   )
)