2016-04-10 8 views
3

複数の異なるタイプ(エンティティタイプ?)のドキュメントを1つのコレクションに格納しています。あなたがテーブルからselect *で行うのと同じように、特定のタイプのすべてのドキュメントを取得する最良の方法は何でしょうか。DocumentDB:同じエンティティタイプのすべてのドキュメントを取得

  1. はプロパティとしてタイプを含める:。私はこれまで見

    オプションしかし、それはドキュメントを手に入れるときにすべてのドキュメントを調べることを意味します。

  2. ドキュメントIDにタイプ名を追加し、IDで検索する場合は、typename*を入力してください。

これを行うより良い方法はありますか?

答えて

4

エンティティタイプのプロパティは組み込まれていませんが、自分で作成してインデックスを作成できます。この時点で、それはWHERE句を追加するのと同じくらい簡単です:

WHERE docs.docType = "SomeType" 

と仮定すると、それはハッシュベースのインデックスだ、これは効率的な検索を提供し、不要なドキュメントタイプをフィルタリングする必要があります。

のように、型をプロパティ(ドキュメントIDなど)に埋め込むと、部分的な文字列の一致が必要になりますが、インデックス付きプロパティの比較ほど効率的ではありません。

このクエリがあなたに支払っていることを知りたい場合は、RU値がポータルと​​リターンヘッダーの両方に表示されます。

1

コレクションのtypeプロパティにインデックスを付けると、完全なスキャンではありません。

2

私はDavidの答えに同意し、docTypeフィールドを1つ使用することは、初めてDocumentDBを使用し始めたときのことです。しかし、いくつかの実験をした後、私が使い始めた別のオプションがあります。つまり、is<Type>フィールドを作成し、その値をtrueに設定します。これは、索引自体がより小さな部分索引ですが、潜在的にわずかな記憶域を占有する可能性があるため、単一の文字列フィールドを使用するよりも照会の方が少し効率的です。

このアプローチのもう1つの利点は、継承とミックスインに利点があることです。たとえば、特定のエンティティにはisLookup=trueisState=trueの両方があります。私は他のルックアップタイプも持っています。私のアプリケーションコードでは、いくつかの動作はすべての参照フィールドに共通であり、その他の動作はState型にのみ適用されます。

+0

私はこのテクニックを複数の回答で推薦しています。この 'isLookup = true'をどのように達成していますか?すべてのエンティティクラスにこれらのプロパティを追加するのか、より一般的な手法を開発しましたか? – trailmax

+0

私はnode.jsを使用していますので、.NETでそれを行う最良の方法についてはわかりません –

+0

です。これらの問題を明確にしてくれてありがとうございます。 – trailmax

関連する問題