我的文檔存儲在JSON在這樣marklogic搜索文件(我刪除了我的情況下無用的屬性):Marklogic(的NodeJS API) - 匹配對象數組2(或更多)的條件屬性
{
documentId: '',
languages: [{
locale: 'en_UK',
content: {
translated: 'true',
}
}, {
locale: 'de_DE',
content: {
translated: 'false',
}
}, {...}],
}
編輯:看來我的'無用的'屬性會導致一些問題。這裏我詳細的對象。
{
documentId: '',
/* 4 attrs */,
languages: [{
locale: 'en_UK',
attr: '',
content: {
/* 14 attrs */,
translated: true,
/* 2 or 4 attrs */,
}
}, {
locale: 'de_DE',
attr: '',
content: {
/* 14 attrs */,
translated: false,
/* 2 or 4 attrs */,
}
}, {...}
],
/* 0 or 2 attrs */
}
我試圖找到在語言至少一個對象中的所有文件,其中區域= 'en_UK'和content.translated =真與
var query =
qb.where(
qb.directory('myDocuments'),
qb.scope(
qb.property('languages'),
qb.and(
qb.scope(qb.property('code'), qb.term('en_UK')),
qb.scope(qb.property('translated'), qb.term('true'))
),
qb.fragmentScope('properties')
)
);
和
qb.where(
qb.directory(myDocuments'),
qb.scope(qb.property('languages'),
qb.propertiesFragment(
qb.value(
qb.property('languages'),
qb.and(
qb.scope(qb.property('code'), qb.term('en_UK')),
qb.scope(qb.property('translated'), qb.term('true'))
)
)
)
)
)
但在這兩種情況下,查詢返回文檔在整個文檔中匹配2個條件的nts,而不是在語言數組的每個對象中。
我閱讀了文檔,但是我還沒有找到任何東西。你有什麼想法,我怎麼能做我的查詢?
編輯:我嘗試一個近查詢,但它不起作用。它不符合好的文件。
qb.where(
qb.directory(config.marklogicConfiguration.product),
qb.scope(qb.property('languages'),
qb.near(
qb.and(
qb.scope(qb.property('code'), qb.term('ja_JP')),
qb.scope(qb.property('translatedInTheLanguage'), qb.term('true'))
),
1,
qb.weight(0),
qb.ordered(true)
)
)
)
我會問是否可以改變我的對象結構。
edit2:最後,我使用Xquery請求來獲得正確的結果。
xdmp:directory("/product/direcory/")/languages[code eq "ja_JP" and content/translated eq "true"] ! root(.)
就我而言,我使用情商內容/翻譯的情形,因爲我的布爾存儲爲一個字符串。 ! 根():返回整個對象,不僅符合條件的語言對象[代碼EQ「Ja_JP表示」作爲內容/翻譯EQ「真」]
類似於edit2的XPath表達式將始終以過濾模式運行,並且可能不太好。 – grtjn