簡體   English   中英

Rethinkdb將對象數組轉換為單個對象

[英]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響應,我試圖轉換為有用的東西。 在我看來,我需要完成兩件事才能實現理智的數據輸出。

  1. 使用name作為鍵並將value作為值,將frustration數組轉換為對象。
  2. 將新轉換的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM