是否可以搜索文档但只能使用数组元素中的特定属性进行搜索?此外,结果可能只包含匹配的数组元素而不是整个文档(因为同一文档中的其他数组元素可能不匹配)。
示例:给出JSON Marklogic文档
{
"name": "aName",
"children": [{
"name": "A",
"target": {
"min": 2,
"max": 10
}
},{
"name": "B",
"target": {
"min": 22,
"max": 32
}
},{
"name": "C",
"target": {
"min": 4,
"max": 7
}
}]
}
我只想匹配children
target.min
< target.max
5和children[0]
> 5。
在这种情况下,只有children[2]
和
[
{
"name": "A",
"target": {
"min": 2,
"max": 10
}
},
{
"name": "C",
"target": {
"min": 4,
"max": 7
}
}
]
匹配。然后,我如何指定仅返回的查询:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
DownloadManager.shared.onProgress = { (row, progress) in
print("Downloading for \(row) with progress \(progress)")
}
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let url = URL(string: "link")!
DownloadManager.shared.identifier = indexPath.row
let downloadTaskLocal = DownloadManager.shared.activate().downloadTask(with: url)
downloadTaskLocal.resume()
}
如何构建相关查询。注:我更喜欢服务器端javascript或Node.js实现。
答案 0 :(得分:2)
对于Node.js,请查看queryBuilder.extract或搜索响应转换,看看其中任何一个是否满足您的需求。这两个主题都在这里讨论:http://docs.marklogic.com/guide/node-dev/search#id_24160。
在SJS中,jsearch mapper和reducer hook提供了类似的功能。请参阅以下主题“使用地图和减少转换结果”:http://docs.marklogic.com/guide/search-dev/javascript#id_49222。
答案 1 :(得分:2)
在MarkLogic 9中,您可以使用TDE为每个具有最小值和最大值的子项投影一行,并使用带有比较的光学查询。
目前,Optic不能用于Node.js,但这是有计划的。
在MarkLogic 8中,最好的方法是将每个子项建模为单独的文档,并在最小值和最大值上创建范围索引。
希望有帮助,
答案 2 :(得分:0)
试试这个
var a = {
"name": "aName",
"children": [{
"name": "A",
"target": {
"min": 2,
"max": 10
}
},{
"name": "B",
"target": {
"min": 22,
"max": 32
}
},{
"name": "C",
"target": {
"min": 4,
"max": 7
}
}]
};
var b = [];
for(var i of a.children){
if(i.target.min < 5 && i.target.max > 5){
b.push(i);
}
}
console.log(b);