0

私のアプリでは、ユーザーには友達がいます。ユーザーは、送信要求を送信し、友人(ステータス属性でマークされている)を確認し、友人を削除することができます。ユーザーにはX人の友人がいるだけです。これを保存するには、存在しない種類があります。次に、Friendsという子エンティティがあります。エンティティグループ上でこれらの操作を実行する方法

友達

-Key((NonExistantKindParent,my_username), friends_username) 
-status 
-created_date 

キーが存在しません祖先で構成され、IDは、ユーザのユーザ名です。このようになります。子エンティティは、そのユーザーのすべての友人になります。この結果、それぞれの友情は、friend1のために1回、friend2のために1回、2回保存されます。彼らはエンティティグループにあり、強固な一貫性があり、トランザクションを実行することができます(たとえば、ユーザーが友人を要求したユーザーと依頼先の友人の両方に書き込む必要がある友人を追加する場合)。そこ私が必要とするより多くの操作がありますが、私はその後、私は私が必要とする他の操作にその知識を適用することが可能な次の操作を実行する方法を理解しようとしています:

  • 日付によってユーザの友人のためのすべてを取得するにはそれらは作成されました(友人のユーザー名のみが必要です)。

  • ユーザーの確認済みの友だちをすべて取得する(ステータス=「確認済み」)。

ドキュメントを読む:https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.30.3/datastore/query?method=selectエンティティグループを照会する方法が混乱しています。これらのクエリのいくつかの場合、私はプロパティフィルタとそのように見える祖先フィルタを適用する必要がありますが、どのようにわかりませんか?私がエンティティ以外のグループに問い合わせるだけであれば、ドキュメントは非常に便利です。

答えて

1

query#filterを使用してプロパティフィルタを適用し、祖先クエリをquery#hasAncestorに設定します。

+0

たとえば、すべてのユーザーの友人を取得するには、私は子孫が必要な祖先が必要ないです。どのように私はこれを行うだろう、これらの私はフィルタがそれをするとは思わない? – user2924127

+0

'hasAncestor'は祖先の子孫を返します。それは「この先祖を持つ記録を返す」ということです。 'filter'は"このプロパティがこの値と等しいレコードを返します "と言っています。 – Stephen

+0

はい、私は知っていますが、それらを一緒に使用する方法はありますか?たとえば、私は次のようなことをします:var query = datastore.createQuery( 'Friends')。hasAncestor(datastore.key(['FriendParent'、 'my_username']))filter( 'status'、 'pending');それは何らかのデータを返すべきですが、空の配列[]を返しています。 – user2924127