我的数据库中有一个json文档,如下所示:
{
"uri" : "/me/myself/and/bd1e0f91656bfc713eb6560eeaad7ad1.json",
"category" : "content",
"format" : "json",
"versionId" : "14697362595356370",
"contentType" : "application/json",
"contentLength" : "1938",
"collections" : ["http://me.myself.com/collectionA"],
"properties" : {
"relatives" : ["/me/myself/and/B.json", "/me/myself/and/A.json"]
},
"content":{}
}
我正在尝试获取属性中具有特定亲属的所有文档:
qb.where(
qb.scope(
qb.property('relatives'),
qb.word("/me/myself/and/B.json"),
qb.fragmentScope('properties')
))
但是我不断收到一大堆不符合查询的文档。
知道如何使用Marklogic NodeJS API执行此操作吗?
答案 0 :(得分:1)
我看到两件看起来可能有问题的事情。第一个是seek
。这告诉MarkLogic查看document's properties,而不是文档的内容。考虑到您的示例JSON文档,这看起来不像您的意思。
第二个问题是单词查询 - “/me/myself/and/B.json”可能被分解为其组成单词(我,我自己,和B,json),然后匹配其他文件。你想要完全匹配那里,所以尝试一个值查询:
qb.fragmentScope('properties')
请注意,qb.where(
qb.scope(
qb.properties('properties'),
qb.value('relatives', '/me/myself/and/B.json')
)
)
和qb.scope
会将搜索限制为仅在qb.properties
JSON属性下的relatives
中显示的值匹配。这与上面提到的JSON属性与内容点不同。
答案 1 :(得分:0)
qb.where(
qb.propertiesFragment(
qb.term('/me/myself/and/B.json')
)
)
这对我有用。