1

私は、再帰的なデータ構造を構築することであるSQLで通常単純なことをしようとしています(たとえば、同じテーブルに外部キーを使用して)(MongoDBでも同じくらい簡単かもしれませんが、まだわかりません)。

この例では、Web サイトのページについて説明します。複数レベルのページ構造を作りたいです。したがって、次の可能性があります。

  • 私たちの製品
    • 製品 1
    • 製品 2
  • 私たちに関しては
    • ここはどこ?
    • お問い合わせ

ページにタイトルとコンテンツがあるとしましょう。

これを行う最善の方法と、そのデータ構造 (すべてのレベルのすべてのページを表示するページ) に基づいてサイトマップを作成する方法を知る必要があります。

この場合、MongoDB を使用して node.js アプリを構築しています。

編集:各ページで親ページを参照するだけで機能しませんか? ページは次のようになります{ title: 'test', content: 'hello world', parentPage: ObjectID(parent page) }

助けてくれてありがとう!

4

2 に答える 2

3

個人的には、ここに具体化されたパス構造を実装します。大文字と小文字を区別しない接頭辞付きの正規表現を使用して更新およびクエリを実行するのは非常に簡単です (つまり、インデックスを使用します)。例は次のようになります。

{_id: {}, path: 'about_us/where_are_we'}

また、ご覧のとおり、これにより、SEO フレンドリーな URL がこのツリーに直接ヒットし、最大限の力が得られます。これは、次のような URL を表示したいヘルプ システムで特に役立ちます。

/help/how-to-use-my-site

パスに直接ヒットするか、how-to-use-my-siteさらにはさらに 2 つのフィールドを格納して、次のように全文を直接ヒットすることができます。

{_id: {}, path: 'about_us/where_are_we', normalised_url: 'where_are_we'}

もちろん、前の回答で述べたように、コンテンツにアクセスする方法を知る必要がありますが、具体化されたパスは私の意見では良いスタートです。

Mongo のツリー構造について詳しくは、http ://www.mongodb.org/display/DOCS/Trees+in+MongoDB をご覧ください。

于 2012-08-04T12:57:34.077 に答える
1

データへのアクセス方法を知る必要があります。

前回ツリー構造を使用していたとき、Ruby でこれを実装しました(さまざまな情報源からインスピレーションを得ました)。これには _id パスと完全な uri (スラッグ化されたページ タイトル) が格納されます。このような構造を処理するのは面倒です。

一方、コレクション ドキュメント (ルート) と埋め込みドキュメント (枝と葉) を作成できます。処理はより簡単ですが、クエリを実行するときにツリー全体を取得する必要があり、その深さがわかっている場合にのみ内部ドキュメントをクエリできます。

私の過去の経験から、ツリー構造をサポートするためのすべての作業はろうそくの価値がありません (それが要件でない限り)。ほとんどのユーザーは、固定されたカテゴリよりもタグに基づいて緩い構造を作成します。

于 2012-08-04T12:46:40.937 に答える