[英]Rethinkdb convert an array of objects to a single object
如何轉換以下內容:
[{
"name": "annoying data",
"status": "evil",
"frustration": [
{
"name": "foo",
"value": 1
},
{
"name": "bar",
"value": 2
},
{
"name": "baz",
"value": 3
}
]
}...]
對此輸出:
[{
"name": "annoying data",
"status": "evil",
"foo": 1,
"bar": 2,
"baz": 3
}...]
從重新考慮的查詢?
我們有一個存儲的第三方API響應,我試圖轉換為有用的東西。 在我看來,我需要完成兩件事才能實現理智的數據輸出。
name
作為鍵並將value
作為值,將frustration
數組轉換為對象。 frustration
對象合並到父對象中。 我有第2步的可能解決方案:
.map(function(row) {
row.pluck('name', 'status').merge(row('frustration'))
})
但我在第一步無處可去。 任何想法都非常感謝!
當前的完整查詢(名稱已更改以保護...我!):
r.db('test').table('evil_things').map(function(row) {
var x = row('a')('tree')('children')
.nth(0)('children')
.nth(0)
.map(function(x) {
return x('children');
})
.concatMap(function(x) {
return x.pluck('name', 'value');
})
;
return {
'name': row('name'),
'status': row('status'),
'frustration': x
};
}).filter(function(row) {
return r.expr(['FOO','BAR','BAZ']).contains(row('name').upcase());
})
.orderBy('status');
你是正確的。
您可以使用對象從鍵值數據列表創建object
。 但是object
接收參數列表而不是數組,因此您需要args
。
frustation
是一個數組,每個文檔都作為對象,你需要一種方法將它變成一個flatten數組的列表,意思是從這個數組
[{key1: val1}, {key2: val2},...]
我們把它轉向
[key1, val1, key2, val2,...]
為object
提供args
。 這是concatMap
的工作。
我們試試這個:
r.expr([{
"name": "annoying data",
"status": "evil",
"frustration": [
{
"name": "foo",
"value": 1
},
{
"name": "bar",
"value": 2
},
{
"name": "baz",
"value": 3
}
]
}])
.map(function(doc) {
return doc.pluck("name", "status").merge(
r.object(r.args(doc('frustration')
.concatMap(function(frustration) { return [frustration("name"), frustration("value")] })
))
)
})
結果:
[
{
"bar": 2 ,
"baz": 3 ,
"foo": 1 ,
"name": "annoying data" ,
"status": "evil"
}
]
希望能幫助到你:
這樣的事情應該有效:
.map(function(row) {
return row.pluck('name', 'status').merge(
row('frustration').map(function(x){ return [x['name'], x['value']]; }).coerceTo('object'))
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.