2

コレクション名 DSP と同様に、データを ArangoDB 2.7.1 に保存しました。

{"content": "Book.xml", "type": "string", "name": "name", "key": 102}
{"content": "D:/XMLexample/Book.xml", "type": "string", "name": "location", "key": 102}
{"content": "xml", "type": "string", "name": "mime-type", "key": 102}
{"content": 4130, "type": "string", "name": "size", "key": 102}
{"content": "Sun Aug 25 07:53:32 2013", "type": "string", "name": "created_date", "key": 102}
{"content": "Wed Jan 23 09:14:07 2013", "type": "string", "name": "modified_date", "key": 102}
{"content": "catalog", "type": "tag", "name": "root", "key": 102}
{"content": "book", "type": "string", "name": "tag", "key": 103} 
{"content": "bk101", "type": {"py/type": "__builtin__.str"}, "name": "id", "key": 103}
{"content": "Gambardella, Matthew", "type": {"py/type": "__builtin__.str"}, "name": "author", "key": 1031} 
{"content": "XML Developer's Guide", "type": {"py/type": "__builtin__.str"}, "name": "title", "key": 1031}
{"content": "Computer", "type": {"py/type": "__builtin__.str"}, "name": "genre", "key": 1031}
{"content": "44.95", "type": {"py/type": "__builtin__.str"}, "name": "price", "key": 1031}
{"content": "2000-10-01", "type": {"py/type": "__builtin__.str"}, "name": "publish_date", "key": 1031}
{"content": "An in-depth look at creating applications with XML.", "type": {"py/type": "__builtin__.str"}, "name": "description", "key": 1031}

ここで、1 つのセット{"content": "Book.xml", "type": "string", "name": "name", "key": 102}は、コレクション内の 1 つのドキュメントを表します。

keyここで、複数のドキュメントの属性の値が類似しているすべてのドキュメント、またはジャンルがコンピューターである値のタイトルと価格を持つすべてのドキュメントにアクセスしたいと考えていますkeyFOR p IN DSP filter p.name == "publish_date" AND p.content == "2000-10-01" AND p.name == 'title' return pコレクション内ではなく、単一のドキュメント内で比較しています。

リレーショナル データベースと同様に、何らかの自己結合が必要ですが、自己結合がどのように適用されるかはわかりません。publish_date「2000-10-01」というキー属性の同じ値を持つすべてのドキュメントにアクセスする方法を教えてください。publish_date値 2000-10-01 に対応する値keyは 1031であるため、このクエリの結果は次のドキュメントになると思います。

{"content": "Gambardella, Matthew", "type": {"py/type": "__builtin__.str"}, "name": "author", "key": 1031} 
{"content": "XML Developer's Guide", "type": {"py/type": "__builtin__.str"}, "name": "title", "key": 1031}
{"content": "Computer", "type": {"py/type": "__builtin__.str"}, "name": "genre", "key": 1031}
{"content": "44.95", "type": {"py/type": "__builtin__.str"}, "name": "price", "key": 1031}
{"content": "2000-10-01", "type": {"py/type": "__builtin__.str"}, "name": "publish_date", "key": 1031}
{"content": "An in-depth look at creating applications with XML.", "type": {"py/type": "__builtin__.str"}, "name": "description", "key": 1031}
4

1 に答える 1

3

name公開日が attribute に格納され、その値が attribute に格納されていると仮定すると、content最初にその組み合わせを持つすべてのドキュメントを検索する必要があります。

FOR self IN DSP 
  FILTER self.name == 'publish_date' && self.content == '2000-10-01'
  RETURN self

これらのドキュメントが見つかったら、再度 DSP コレクションに結合して、同じkey値を持つドキュメントを除外しますが、最初の .xml から既に見つかったドキュメントを除外しますFOR

FOR self IN DSP 
  FILTER self.name == 'publish_date' && self.content == '2000-10-01'
  FOR other IN DSP 
    FILTER other.key == self.key && other._key != self._key 
    RETURN { self, other }

常に名前とコンテンツおよび/またはキーでフィルタリングしている場合は、これらの属性にインデックスを付けることが賢明な場合があります。keyそれ自体でインデックスに値するようです。key常に等値比較されるため、ハッシュ インデックスで十分です。nameそしてcontent(この順序で) スキップリスト インデックスに入れることができます。

于 2016-01-20T08:25:27.430 に答える