我在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
}
}
我想过滤那些专辑的标签。 description标记包含此信息。但是,此元素有时是一个数组,有时是一个字符串。我需要那些包含价值"专辑"无论数据类型如何。到目前为止,我只能得到那些"描述"是一个字符串。这是我到目前为止可以使用的代码:
r.table("labels")('label').filter(r.row("formats")("format")("descriptions")("description").eq("Album"))('id')
有没有办法获得Album存在于数组中的那些id值?提前致谢
答案 0 :(得分:0)
我建议更改您的数据格式,以便description
始终是一个数组,即使该数组中只有一个元素。如果您这样做,则此查询有效:
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'));
});
})