0

rethinkdb データベースの私の json は次のとおりです (例として 4 つのドキュメントを示しています)。

    {
        "label": {
            "id": 59,
            "country": "Germany",
            "formats": {
                "format": {
                    "text": "",
                    "name": "CD",
                    "qty": 1,
                    "descriptions": {
                        "description": [
                            "Album",
                            "Limited Edition"
                        ]
                    }
                }
            }
        }
    }


    {
        "label": {
            "id": 60,
            "country": "US",
            "formats": {
                "format": {
                    "text": "",
                    "name": "CD",
                    "qty": 1,
                    "descriptions": {
                        "description": "Album"
                    }
                }
            }
        }
    }

    {
        "label": {
            "formats": {
                "format": {
                    "text": "",
                    "name": "Vinyl",
                    "qty": 1,
                    "descriptions": {
                        "description": [
                            "12\"",
                            "33 ⅓ RPM"
                        ]
                    }
                }
            },
            "country": "US",
            "id": 42
        }
    }
{
    "label": {
        "formats": {
            "format": {
                "text": "",
                "name": "Vinyl",
                "qty": 1,
                "descriptions": {
                    "description": "12\""
                }
            }
        },
        "country": "US",
        "id": 10
    }
}

アルバムであるラベルをフィルタリングしたいと思います。説明タグには、この情報が含まれています。ただし、この要素は配列の場合もあれば、文字列の場合もあります。データ型に関係なく、値「Album」を含むラベルが必要です。これまでのところ、「説明」が文字列である値のみを取得できます。これは私がこれまでに使用できるコードです:

r.table("labels")('label').filter(r.row("formats")("format")("descriptions")("description").eq("Album"))('id')

Album が配列内に存在する場合でも、それらの id 値を取得する方法はありますか? 前もって感謝します

4

1 に答える 1

0

description配列に要素が1つしかない場合でも、常に配列になるようにデータ形式を変更することをお勧めします。これを行うと、次のクエリが機能します。

r.table('labels')('label').filter(function(row) {
  return row("formats")("format")("descriptions")("description").contains('Album');
})

それをしたくない場合は、これを行うことができます:

r.table('labels')('label').filter(function(row) {
  return row("formats")("format")("descriptions")("description").do(function(desc) {
    return r.branch(desc.typeOf().eq('ARRAY'), desc.contains('Album'), desc.eq('Album'));
  });
})
于 2015-06-17T02:29:32.550 に答える