首页 > 解决方案 > 如何返回列而不是数据行?

问题描述

如何使用节点、mongodb 按列检索数据,知道如何做吗?

现在我正在检索这样的数据,

schema.method("toJSON", function () {
        const { _id, ...object } = this.toObject();
        object.id = _id;
        console.log('OBJECT ', object)
        return object;
    });

我现在得到的是,

[
  {
    "username": "2",
    "heartrate": 150,
    "bodytemperature": 110,
    "bloodoxygen": 210,
    "bloodpressure": 240,
    "createdAt": "2021-10-02T18:11:09.559Z",
    "updatedAt": "2021-10-02T18:11:09.559Z",
    "__v": 0,
    "id": "6158a0bddd4ee2fd9dffaa6b"
  },
  {
    "username": "2",
    "heartrate": 150,
    "bodytemperature": 110,
    "bloodoxygen": 210,
    "bloodpressure": 240,
    "createdAt": "2021-10-02T20:00:20.173Z",
    "updatedAt": "2021-10-02T20:00:20.173Z",
    "__v": 0,
    "id": "6158ba54ba54444d2c69f0cc"
  }
]

我想要的是这个

{
  "username":[ "2", "2"],
  "heartrate": [150, 150],
  "bodytemperature": [110, 110],
  "bloodoxygen": [210,210],
  "bloodpressure": [240, 240]
}
  

谢谢

标签: node.jsmongodbmongoose

解决方案


您可以$groupnull所有对象放在一起并$push放入这样的数组中:

yourModel.aggregate([
  {
    "$group": {
      "_id": null,
      "username": {
        "$push": "$username"
      },
      "heartrate": {
        "$push": "$heartrate"
      },
      "bodytemperature": {
        "$push": "$bodytemperature"
      },
      "bloodoxygen": {
        "$push": "$bloodoxygen"
      },
      "bloodpressure": {
        "$push": "$bloodpressure"
      }
    }
  }
])

这里的例子

您也可以在聚合管道中添加一个额外的阶段以不在_id: null 这里输出示例

结果是:

[
  {
    "bloodoxygen": [210,210],
    "bloodpressure": [240,240],
    "bodytemperature": [110,110],
    "heartrate": [150,150],
    "username": ["2","2"]
  }
]

推荐阅读