[28/09 17:15 更新]
我正在处理以下类型的 json 数据:
[
{
"id": 1,
"title": "Sun",
"seeAlso": [
{
"id": 2,
"title": "Rain"
},
{
"id": 3,
"title": "Cloud"
}
]
},
{
"id": 2,
"title": "Rain",
"seeAlso": [
{
"id": 3,
"title": "Cloud"
}
]
},
{
"id": 3,
"title": "Cloud",
"seeAlso": [
{
"id": 1,
"title": "Sun"
}
]
},
];
包含在数据库中后,使用 node.js 进行搜索
db.documents.query(
q.where(
q.collection('test films'),
q.value('title','Sun')
).withOptions({categories: 'none'})
)
.result( function(results) {
console.log(JSON.stringify(results, null,2));
});
将返回名为“Sun”的电影和具有 seeAlso/title 属性的电影(请原谅 xpath 语法)=“Sun”。
我需要找到 1/ 标题 = 'Sun' 的电影 2/ seeAlso/title = 'Sun' 的电影。
我尝试使用 q.scope() 进行容器查询,但没有成功;我没有找到如何确定根对象节点(第一种情况)的范围,而对于第二种情况,
q.where(q.scope(q.property('seeAlso'), q.value('title','Sun')))
作为第一个结果返回与根对象节点内的所有文本匹配的项目
{
"index": 1,
"uri": "/1.json",
"path": "fn:doc(\"/1.json\")",
"score": 137216,
"confidence": 0.6202662,
"fitness": 0.6701325,
"href": "/v1/documents?uri=%2F1.json&database=Documents",
"mimetype": "application/json",
"format": "json",
"matches": [
{
"path": "fn:doc(\"/1.json\")/object-node()",
"match-text": [
"Sun Rain Cloud"
]
}
]
},
这似乎很疯狂。
关于如何对非规范化的 json 数据进行此类搜索的任何想法?