2016-07-25 6 views
2

マイドキュメント属性一致検索文書は(私は私の場合のために役に立たない属性を削除します) 編集:私の「役に立たない」属性がいくつかの問題を引き起こすようです。ここに私の詳細なオブジェクト。Marklogic(Nodejs API)は、このようなmarklogicにJSONに保存されているオブジェクト配列内の2(またはそれ以上)の条件が

私は 言語ロケール= 'en_UK'

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') 
    ) 
); 

で=真
をcontent.translated
に少なくとも一つのオブジェクトを持っているすべての文書を検索してみてください
{ 
    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 */ 
} 

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')) 
     ) 
    ) 
    ) 
) 
) 

どちらの場合でも、クエリの戻り値のdocume ntsは、言語配列の各オブジェクトではなく、ドキュメント全体の2つの条件に一致します。

私はドキュメントを読みましたが、何も見つかりませんでした。どのように私は私のクエリを作ることができるアイデアはありますか?

編集:近いクエリを試しますが、動作しません。良い文書とは一致しません。

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を使う/条件を翻訳しました。 ! ルート(。):[/ EQ翻訳「真」コードEQ「ja_JPで」と内容]全オブジェクト、条件に合致するだけでなく、言語のオブジェクトを返す

+0

edit2のようなXPath式は常にフィルタリングモードで実行されますが、それはあまり拡張できません。 – grtjn

答えて

2

near-queryを使用してみてください、1 Location Qualifiers available in structured queriesのロケールと翻訳されたクエリを入力し、distance: 1ordered: trueを指定します。これが機能するかどうかは、削除した「役に立たない属性」がどこにあるかによって異なります。

これでうまくいかない場合は、おそらく構造に別のレイヤーを導入する必要があります。

{ 
    documentId: '', 
    languages: [{ 
    item: { 
     locale: 'en_UK', 
     content: { 
     translated: 'true', 
     } 
    } 
    }, { 
    item: { 
     locale: 'de_DE', 
     content: { 
     translated: 'false', 
     } 
    } 
    }, {...}], 
} 

これは本当にかわいいですが、container-queryを実行させるでしょう。

+1

ニア・クエリーを使用する場合は、関連するポジション・インデックスを有効にしてください。 – grtjn

関連する問題