【问题标题】:nodejs postgres JSON return in nested array of objects?nodejs postgres JSON返回嵌套的对象数组?
【发布时间】:2021-08-03 21:45:17
【问题描述】:

在这里寻求帮助。

我有一个基本的 postgres 选择语句,它只返回一个 JSONb 列。

************ 编辑以添加 SQL 查询 ************

anpool.query(`SELECT data as test
                        FROM appanalytics
                        WHERE to_date(data->>'dateTime', 'MM/DD/YYYY') 
                        BETWEEN $3 
                        AND $4
                        AND cid=$1 AND aid=$2`,[req.session.cID,req.session.AccountID,endDate,startDate]).then(analytics =>{

//This returns an array of objects, each object in the array 
// is wrapped in the column name as shown above
console.log(analytics)
});

现在这工作正常,但是数组中的每个对象都包含在表名中

[
  {
    test: {
      ip: '10.10.10.10',
      atID: 0,
      uuID: '084B98DE-6D89-490E-8238-E25DDC8E5C04',
      itemID: '0',
      timeEnd: '2021-07-28T13:40:16.788Z',
      actionID: 'speakerMainDetail',
      dateTime: '07/28/2021',
      location: [Object],
      timeStart: '2021-07-27T12:54:21.284Z',
      deviceType: 'web'
    }
  }
]

所以,在这个响应中,您可以看到,对象嵌套在“测试”中,我需要它是顶层,所以每个响应对象都没有嵌套在测试中,关于如何可能的任何想法?使用 nodeJS 和 pg npm。

谢谢

【问题讨论】:

  • 请向我们展示您的 SQL 和 JS 代码,然后我们才能建议您需要更改的内容。
  • @Bergi 我已经添加了有问题的实际查询,谢谢
  • 啊,是的,你得到了一个行数组,每个对象都有你选择的列。您实际上并没有什么可以或应该做的事情 - 请注意您不能使用ipatID 等作为列名,因为(可能)这些是动态的。只需analytics.map(row => row.test)
  • 顺便说一句,如果您使用的是 node-postgres 而不是围绕它的一些包装器,您不应该得到带有 .rows 属性而不是数组的查询结果吗?
  • @Bergi 是的,它确实返回包裹在 .rows 中,然后在其中返回包裹在列名中的 JSONB 数据。但是,您对映射结果的评论效果很好!如果您想添加答案,我将很乐意接受。感谢您的帮助!

标签: javascript node.js postgresql


【解决方案1】:

您会返回一组行,每行都是一个包含您选择的列的对象。您实际上并没有什么可以或应该做的事情——请注意,您不能使用ipatID 等作为列名,因为(可能)这些是动态的。你可以这样做

anpool.query(
  `SELECT data as test
    FROM appanalytics
    WHERE to_date(data->>'dateTime', 'MM/DD/YYYY') 
    BETWEEN $3 
    AND $4
    AND cid=$1 AND aid=$2`,
  [req.session.cID,req.session.AccountID,endDate,startDate]
).then(result => {
   const analytics = result.rows.map(row => row.test);
   console.log(analytics);
});

【讨论】:

    【解决方案2】:

    你可以这样提取它:

    const res = [
      {
        test: {
          ip: '10.10.10.10',
          atID: 0,
          uuID: '084B98DE-6D89-490E-8238-E25DDC8E5C04',
          itemID: '0',
          timeEnd: '2021-07-28T13:40:16.788Z',
          actionID: 'speakerMainDetail',
          dateTime: '07/28/2021',
          location: [Object],
          timeStart: '2021-07-27T12:54:21.284Z',
          deviceType: 'web'
        }
      }
    ];
    
    const { test } = res[0];
    
    console.log(test);

    【讨论】:

      猜你喜欢
      • 2016-11-22
      • 2018-12-17
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      相关资源
      最近更新 更多