0

次のArticleような構造の型があります。

type Article struct {
    Title    string
    Content  string `datastore:",noindex"`
}

私のサイトの管理部分では、すべての記事をリストしています。このリストを表示するために必要な唯一のプロパティはTitle; 記事の内容をつかむのはもったいないです。だから私は射影クエリを使用します:

q := datastore.NewQuery("Article").Project("Title")

これまでのところ、すべてが期待どおりに機能しています。Articleここで、2 つのフィールドを に追加して、一部の記事を公開記事リストに非表示にしたり、アクセスを試みたときに表示できないようにしたいと決めました。データストアがスキーマレスであることを理解すると、これは非常に簡単になると思います。2 つの新しいフィールドを に追加しますArticle

type Article struct {
    Title    string
    Content  string `datastore:",noindex"`

    Unlisted   bool
    Unviewable bool
}

また、記事が公開されていない、または表示できない場合に管理記事リストで示したいので、それらを射影クエリに追加します。

q := datastore.NewQuery("Article").Project("Title", "Unlisted", "Unviewable")

残念ながら、これはデータストアにUnlistedand Unviewablewhenを明示的に含めたエントリのみを返します。Put

現時点での私の回避策は、射影クエリの使用をやめることです。

q := datastore.NewQuery("Article")

すべてのエントリが返され、期待どおりにゼロ値に設定されていないUnlisted、または設定されていないエントリが返されます。Unviewable欠点は、記事の内容が不必要に流されていることです。

この場合、その妥協はひどいものではありませんが、同様の状況が将来発生すると予想され、射影クエリを使用できないことは大きな問題になる可能性があります. プロジェクション クエリとデータストア エントリへの新しいプロパティの追加は、うまく適合していないようです。何かを誤解したり、正しいやり方を見逃したりしていないことを確認したい。

  1. プロジェクションクエリがこのように動作する必要があることは、ドキュメントからはわかりません(ゼロ値で含めるのではなく、プロジェクションされたプロパティを持たないエントリを無視します)。これは意図した動作ですか?

  2. このようなシナリオ (構造体に新しいフィールドを追加する/エントリにプロパティを追加する) で唯一のオプションは、射影クエリを放棄するか、何らかの「スキーマ移行」を実行して、Getすべてのエントリを ting してからPuting back することで、値がゼロになるようにすることです。プロパティと投影することができますか?

4

1 に答える 1

1

プロジェクション クエリは、エンティティではなくインデックスからフィールドのデータを取得します。新しいプロパティを追加した場合、既存のレコードは、プロジェクト クエリを実行しているインデックスに表示されません。インデックスを再作成する必要があります。

あなたはそれらの特定のプロパティを求めていますが、それらは存在しないため、現在の動作です。

おそらく、射影クエリは、クエリに配置するフィルターに加えて、要求されたインデックスに値を持つエンティティの要求と考える必要があります。

于 2013-08-10T01:51:10.143 に答える