sql >> データベース >  >> RDS >> PostgreSQL

DjangoはPostgresを使用してJSONFieldのカウントに注釈を付けます

    jsonb_extract_path_text を使用できます 機能 経由 フィールド変換の代替としてのオブジェクト:

    Pet.annotate(dinner=Func(
        F('data'), Value('diet'), Value('dinner'),
        function='jsonb_extract_path_text'))  \
    .values('dinner')  \
    .annotate(total=Count('dinner'))
    

    フィールドがdata__diet__dinnerを変換する理由 失敗は、json構造の1レベルよりも深くなると、Django内のエラーになります GROUP BYを使用します SQLで。最初のレベル(nameanimaldiet )正常に動作するはずです。

    その理由は、ネストされた変換の場合、Djangoが使用されるSQL構文を変更し、単一の値からリストに切り替えて、json構造へのパスを指定するためと思われます。

    これは、ネストされていないjson変換(=第1レベル)に使用される構文です:

    "appname_pet"."data" -> 'diet'
    

    そして、これはネストされた変換(第1レベルよりも深い)に使用される構文です:

    "appname_pet"."data" #> ARRAY['diet', 'dinner']
    

    クエリを作成している間、Djangoは必要なGROUP BYを実行している間、そのリストをチョークします。 条項。これは避けられない制限ではないようです。変換のサポートは非​​常に新しく、これはおそらくまだ解決されていない問題の1つです。したがって、Djangoチケット を開くと 、これは将来的にはいくつかのバージョンで機能する可能性があります。




    1. SQL Serverで、リンクサーバー接続を介してOracle Timestamp列をクエリするにはどうすればよいですか?

    2. sequelizeを使用してローカルノードアプリからherokupostgresqlデータベースに接続できません

    3. オンライン求人ポータルデータモデルの改善

    4. phpランダムmysqlデータ