MarkLogic Node.js 排序 "last-modified"
MarkLogic Node.js Sort on "last-modified"
我想按元数据 属性“last-modified”对文档进行排序。我已经在 "last-modified" 上创建了元素范围索引,并且还在 database.But 的管理面板中启用了选项“维护上次修改”,当我 [=26] =] 下面的语句 Node.js
return db.documents.query(
qb.where().orderBy(qb.sort("last-modified")).slice(from, length)).result();
我遇到了以下错误。请帮忙?
Error { [Error: query documents: response with invalid 400 status]
message: 'query documents: response with invalid 400 status',
statusCode: 400,
body:
{ errorResponse:
{ statusCode: 400,
status: 'Bad Request',
messageCode: 'SEARCH-BADORDERBY',
message: 'SEARCH-BADORDERBY: (err:FOER0000) Indexes are required to supp
ort element, element-attribute, json-property, or field sort specifications.' }
} }
更新:澄清片段解释;固定示例
last-modified
属性(由maintain last modified
设置控制)不存储在文档 本身,但在 文档属性 中,这是与每个文档关联的元数据片段。在 MarkLogic Node.js API 中,您可以使用 qb.documentFragment()
or qb.propertiesFragment()
.
限制对文档或文档属性的查询
但是,您只能按所用数据的各个方面进行排序 return:默认情况下,文档本身。您可以使用 qb.fragmentScope()
.
指定您的查询 return documents
或 properties
注意:文档属性在 http://marklogic.com/xdmp/property
命名空间中存储为 XML,因此您的元素范围索引也必须使用该命名空间。
以下是获取 10 个最新文档属性的方法:
return db.documents.query(
qb.where(
qb.fragmentScope('properties')
).orderBy(
qb.sort(
qb.element(qb.qname('http://marklogic.com/xdmp/property', 'last-modified')),
'descending'
)
).slice(1, 10))
.result();
您可以通过将文档本身与 qb.documentFragment()
:
相匹配的任何查询来进一步限制这些结果
假设在 test
上有一个 int
范围索引:
return db.documents.query(
qb.where(
qb.fragmentScope('properties'),
qb.documentFragment(
qb.range( qb.element('test'), '<', 20 )
)
).orderBy(
qb.sort(
qb.element(qb.qname('http://marklogic.com/xdmp/property', 'last-modified')),
'descending'
)
).slice(1, 10))
.result();
最后,如果您想要获取文档本身,而不是它们的属性,您可以向 db.documents.read()
发出请求,并使用查询检索到的文档 URI:
注:以下示例使用lodash/underscore
return db.documents.query(
qb.where(
qb.fragmentScope('properties'),
qb.documentFragment(
qb.range( qb.element('test'), '<', 20 )
)
).orderBy(
qb.sort(
qb.element(qb.qname('http://marklogic.com/xdmp/property', 'last-modified')),
'descending'
)
).slice(1, 10))
.result(function(documents) {
db.documents.read(
_.map(documents, 'uri')
).result(function(documents) {
_.each(documents, function(doc) { console.log(doc.content); })
});
});
或者,您的应用程序可以直接在文档中维护 last-modified
属性,在这种情况下,您的查询会简单得多:
return db.documents.query(
qb.where(
qb.range( qb.element('test'), '<', 20 )
).orderBy(
qb.sort( qb.element('last-modified'), 'descending' )
).slice(1, 10))
.result(function(documents) {
_.each(documents, function(doc) { console.log(doc.content); })
});
我想按元数据 属性“last-modified”对文档进行排序。我已经在 "last-modified" 上创建了元素范围索引,并且还在 database.But 的管理面板中启用了选项“维护上次修改”,当我 [=26] =] 下面的语句 Node.js
return db.documents.query(
qb.where().orderBy(qb.sort("last-modified")).slice(from, length)).result();
我遇到了以下错误。请帮忙?
Error { [Error: query documents: response with invalid 400 status]
message: 'query documents: response with invalid 400 status',
statusCode: 400,
body:
{ errorResponse:
{ statusCode: 400,
status: 'Bad Request',
messageCode: 'SEARCH-BADORDERBY',
message: 'SEARCH-BADORDERBY: (err:FOER0000) Indexes are required to supp
ort element, element-attribute, json-property, or field sort specifications.' }
} }
更新:澄清片段解释;固定示例
last-modified
属性(由maintain last modified
设置控制)不存储在文档 本身,但在 文档属性 中,这是与每个文档关联的元数据片段。在 MarkLogic Node.js API 中,您可以使用 qb.documentFragment()
or qb.propertiesFragment()
.
但是,您只能按所用数据的各个方面进行排序 return:默认情况下,文档本身。您可以使用 qb.fragmentScope()
.
documents
或 properties
注意:文档属性在 http://marklogic.com/xdmp/property
命名空间中存储为 XML,因此您的元素范围索引也必须使用该命名空间。
以下是获取 10 个最新文档属性的方法:
return db.documents.query(
qb.where(
qb.fragmentScope('properties')
).orderBy(
qb.sort(
qb.element(qb.qname('http://marklogic.com/xdmp/property', 'last-modified')),
'descending'
)
).slice(1, 10))
.result();
您可以通过将文档本身与 qb.documentFragment()
:
假设在 test
上有一个 int
范围索引:
return db.documents.query(
qb.where(
qb.fragmentScope('properties'),
qb.documentFragment(
qb.range( qb.element('test'), '<', 20 )
)
).orderBy(
qb.sort(
qb.element(qb.qname('http://marklogic.com/xdmp/property', 'last-modified')),
'descending'
)
).slice(1, 10))
.result();
最后,如果您想要获取文档本身,而不是它们的属性,您可以向 db.documents.read()
发出请求,并使用查询检索到的文档 URI:
注:以下示例使用lodash/underscore
return db.documents.query(
qb.where(
qb.fragmentScope('properties'),
qb.documentFragment(
qb.range( qb.element('test'), '<', 20 )
)
).orderBy(
qb.sort(
qb.element(qb.qname('http://marklogic.com/xdmp/property', 'last-modified')),
'descending'
)
).slice(1, 10))
.result(function(documents) {
db.documents.read(
_.map(documents, 'uri')
).result(function(documents) {
_.each(documents, function(doc) { console.log(doc.content); })
});
});
或者,您的应用程序可以直接在文档中维护 last-modified
属性,在这种情况下,您的查询会简单得多:
return db.documents.query(
qb.where(
qb.range( qb.element('test'), '<', 20 )
).orderBy(
qb.sort( qb.element('last-modified'), 'descending' )
).slice(1, 10))
.result(function(documents) {
_.each(documents, function(doc) { console.log(doc.content); })
});