次の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")
残念ながら、これはデータストアにUnlisted
and Unviewable
whenを明示的に含めたエントリのみを返します。Put
現時点での私の回避策は、射影クエリの使用をやめることです。
q := datastore.NewQuery("Article")
すべてのエントリが返され、期待どおりにゼロ値に設定されていないUnlisted
、または設定されていないエントリが返されます。Unviewable
欠点は、記事の内容が不必要に流されていることです。
この場合、その妥協はひどいものではありませんが、同様の状況が将来発生すると予想され、射影クエリを使用できないことは大きな問題になる可能性があります. プロジェクション クエリとデータストア エントリへの新しいプロパティの追加は、うまく適合していないようです。何かを誤解したり、正しいやり方を見逃したりしていないことを確認したい。
プロジェクションクエリがこのように動作する必要があることは、ドキュメントからはわかりません(ゼロ値で含めるのではなく、プロジェクションされたプロパティを持たないエントリを無視します)。これは意図した動作ですか?
このようなシナリオ (構造体に新しいフィールドを追加する/エントリにプロパティを追加する) で唯一のオプションは、射影クエリを放棄するか、何らかの「スキーマ移行」を実行して、
Get
すべてのエントリを ting してからPut
ing back することで、値がゼロになるようにすることです。プロパティと投影することができますか?