首页 > 解决方案 > 如何使用 retrhinkdb 获取 json 数据

问题描述

(我不是很好的英语。)我使用一个组来包含日期。我想连续获取信息。我需要做什么

.group(r.row('time_create').dayOfWeek())

json导出

    [
        {
        group: 1,
        reduction: [
        {
        detail: "no",
        id: "37751c10-97ea-4a3a-b2c9-3e8b39383b79",
        order_id: "15",
        status: "Not_Delivery",
        time_create: "2018-09-23T15:25:13.141Z"
        }
       ]
      }
   ]

我想将数据 json 更改为

{
  "date":
  {
    "Sun": [
      {
            detail: "no",
            order_id: "15",
            status: "Not_Delivery",
            time_create: "2018-09-28 15:25:13"
    }
    ]
  }
}

我是否必须按照我的意愿提供信息。

标签: node.jsdateexpressgroup-byrethinkdb

解决方案


看起来您尝试过但没有设法转换上一个问题的数据。;)

这是一个命题,这不是唯一的方法。

首先,您似乎想删除该id字段。你可以在你的 ReQL 中使用without

.group(r.row('time_create').dayOfWeek()).without('id')

(您可以without('id')之前申请group,它应该工作相同,请参阅了解更多详细信息。)

然后,将结果数组(我们称之为queryResult)转换为一个对象(我们称之为output):

// prepare the skeleton of the output
let output = {
  date: {}
};
// walk the result, filling the output in the process
queryResult.forEach((groupData) => {
  let key = groupData.group;
  if (!output[key]) {
    output[key] = [];
  }
  output.date[key].push(...groupData.reduction);
})

现在你几乎有了你想要的结构output,唯一的问题是日期键仍然是数字而不是短的日期名称。在我看来,这应该由前端处理,因为您可能希望为前端实现不同的语言。但无论如何,这个想法总是一样的:有一个翻译表,将 Rethink 的日期数字与人类可读的日期名称对应起来:

const translationTable = {
  1: 'Mon',
  2: 'Tue',
  // ...
  7: 'Sun'
};

现在,如果您在前端执行此操作,则只需在需要显示时动态替换数据的键(或从日期名称中检索键,具体取决于您显示内容的方式)。否则,如果您选择后端实现(同样,这显然不是最佳解决方案),您可以在上面的代码中更改一行(假设您translationTable已经声明):

let key = groupData.group;
// becomes
let key = translationTable[groupData.group];

有不明白的可以在评论中提问!


推荐阅读