1

指定されたリスト(パラメーター)のすべての項目がテーブルの列(これもリスト)に含まれるようにクエリを作成しようとしています。また、特定のリスト(パラメーター)の少なくとも1つの項目がテーブルの列に含まれるように、クエリが必要です。例えば:

JDO:

Table: User
| ID | Name | Interests <List of Strings> |

クエリ:

List <String> gifts; // Item to query with
  1. 興味がすべてのギフトに一致するすべてのユーザーをクエリするにはどうすればよいですか?つまり、すべてのギフトはインタレストのサブセットである必要があります。

  2. 興味がいくつかの(少なくとも1つの)ギフトに一致するすべてのユーザーを照会するにはどうすればよいですか?つまり、少なくとも1つの贈り物は利益のサブセットです。

  3. すべての関心がギフトと一致するすべてのユーザーをクエリするにはどうすればよいですか?つまり、すべての利益は贈り物のサブセットである必要があります。

  4. 一部(少なくとも1つ)の関心がギフトと一致するすべてのユーザーをクエリするにはどうすればよいですか?つまり、少なくとも1つの関心は贈り物のサブセットです。

これらのクエリは可能ですか?もしそうなら、どのように?.contains()キーワードを使用してこれらのクエリを実行できますか?もしそうなら、どのように?誰かがいくつかの例を共有できますか?どんな助けでも大歓迎です。

ありがとうございました。

4

1 に答える 1

0

これらの種類のクエリがどのように機能するか(または機能しないか)を理解するには、データストアがエンティティにインデックスを付ける方法を理解することが重要です。リストプロパティを持つエンティティを挿入すると、データストアは各リストエントリを個別のインデックス行に分割します。たとえば、次のエンティティ:

Entity(User):
  id=15
  name="Jim"
  interests=["Drinking", "Banjos"]

自動インデックスに次のインデックスエントリが作成されます。

(User, "id", 15, Key("User", 1))
(User, "name", "Jim", Key("User", 1))
(User, "interests", "Drinking", Key("User", 1))
(User, "interests", "Banjos", Key("User", 1))

(name、interests)に複合インデックスも定義した場合、そのエントリは次のようになります。

("Jim", "Drinking", Key("User", 1))
("Jim", "Banjos", Key("User", 1))

これが確立されると、特定のクエリクエリに次の順序で対処できます。

  1. 各エントリは独自のインデックス行にあるため、これは不可能です。関心のサブセットごとに1つのエントリを含むリストを作成し、それに対して等式クエリを実行することでこれにインデックスを付けることができますが、関心の数が増えるにつれてこれは急速に増加するため、ユーザーがたとえば、5つの利益、または問題にさらに制約を課すことができない場合。
  2. 「IN」フィルターを使用できます。たとえば、「SELECT * FROM User WHERE Interests IN ["Drinking"、 "Banjos"]」-これは、「Drinking」と「Banjos」の少なくとも1つをインタレストとして持つすべてのレコードに一致します。 。これはSDKによって複数の等式サブクエリに分割されるため、クエリリストにエントリがある数のクエリを実行するのと同じであることに注意してください。
  3. これは1の逆です。繰り返しますが、関心の完全な(ソートされた)リストを文字列として保存し、ギフトのリストのサブセットごとに個別のクエリを実行する準備ができていない限り、実際には実用的ではありません。
  4. 私が間違っていなければ、これは2と同じです。つまり、対称操作である2つのセット間の交差点を探しています。

番号1と3の場合、より粗いフィルターを実行し(たとえば、1つまたは2つの関心事を検索し)、メモリ内の結果をフィルター処理して完全に一致するようにすることで、うまくいく可能性があります。

于 2011-02-22T00:07:05.163 に答える