mongodb查询以一种以一种JSON格式发送所有字段的响应

发布于 2025-02-06 20:14:50 字数 2346 浏览 1 评论 0原文

我必须以一种JSON格式发送响应,其中三个品牌名称以及三个制造商名称。 我粘贴了最后一个示例。

这是我的代码 -

getFilterData: function (req, res, next) {
        console.log('Itemfilterlist getAll ');
        let filterlist = []
        let agg = [  {'$match': {'generic_name': req.body.generic_name, 'form_name': req.body.form_name, 'dose_size': req.body.dose_size}}, 
        {'$sort': {'mrp': 1}}, 
        {'$limit': 3},
        {'$group': {_id:'$id',  "generic_name": {$first:"$generic_name"},
        "form_name": {$first:"$form_name"},
        "dose_size": {$first:"$dose_size"},
        "subcategory_name": {$first:"$subcategory_name"},
        brand1: {$push: { "brand_name": "$brand_name", "manufacturer_name": "$manufacturer_name"}}}}
       ]
        let i = 0;
        MasterModel.aggregate(agg,  function (err, arrList) {
            if (err) {
                next(err);
            }
            else {   
                for (let h of arrList) {
                    h.id = ++i            
                    filterlist.push(h);
                }                                                                       

                res.json({ filterList: filterlist })
                
            }
        });
    },

我在组查询的帮助下将组聚合与推动累加器一起显示数据,但我得到了此JSON数据响应: -

 "filterList": [
        {
            "_id": null,
            "generic_name": "Ademetionine",
            "form_name": "Tablets-MD",
            "dose_size": "400MG",
            "subcategory_name": "Others",
            "brand1": [
                {
                    "brand_name": "CARTISURE 400 MG TAB",
                    "manufacturer_name": "Zoic Lifesciences"
                },
                {
                    "brand_name": "ADENORICH 400 MG TAB",
                    "manufacturer_name": "Future Pharma Pvt Ltd"
                },
                {
                    "brand_name": "ENSAME 400 TAB",
                    "manufacturer_name": "ICARUS HEALTHCARE"
                }
            ],
            "id": 1
        }
    ]

但是我希望我的JSON格式像这样: -

{
    id: 1,
    molecule: 'Heparin',
    form: 'Ointments',
    strength: '50IU',
    sub_category: 'CARDIO VASCULAR SYSTEM',
    brand_name_1: 'HEPTRAL(Abbott)',
    brand_name_2: 'HYSAM(Alkem)',
    brand_name_3: 'THROMBOMARK(Mankind)',
  }

I have to send the response in one JSON format in which three brand names along with three manufacturer names are there.
I paste a sample example in last.

This is my code -

getFilterData: function (req, res, next) {
        console.log('Itemfilterlist getAll ');
        let filterlist = []
        let agg = [  {'$match': {'generic_name': req.body.generic_name, 'form_name': req.body.form_name, 'dose_size': req.body.dose_size}}, 
        {'$sort': {'mrp': 1}}, 
        {'$limit': 3},
        {'$group': {_id:'$id',  "generic_name": {$first:"$generic_name"},
        "form_name": {$first:"$form_name"},
        "dose_size": {$first:"$dose_size"},
        "subcategory_name": {$first:"$subcategory_name"},
        brand1: {$push: { "brand_name": "$brand_name", "manufacturer_name": "$manufacturer_name"}}}}
       ]
        let i = 0;
        MasterModel.aggregate(agg,  function (err, arrList) {
            if (err) {
                next(err);
            }
            else {   
                for (let h of arrList) {
                    h.id = ++i            
                    filterlist.push(h);
                }                                                                       

                res.json({ filterList: filterlist })
                
            }
        });
    },

I use the group aggregation with push accumulator to show the data, With the help of a group query but I get this JSON data response:-

 "filterList": [
        {
            "_id": null,
            "generic_name": "Ademetionine",
            "form_name": "Tablets-MD",
            "dose_size": "400MG",
            "subcategory_name": "Others",
            "brand1": [
                {
                    "brand_name": "CARTISURE 400 MG TAB",
                    "manufacturer_name": "Zoic Lifesciences"
                },
                {
                    "brand_name": "ADENORICH 400 MG TAB",
                    "manufacturer_name": "Future Pharma Pvt Ltd"
                },
                {
                    "brand_name": "ENSAME 400 TAB",
                    "manufacturer_name": "ICARUS HEALTHCARE"
                }
            ],
            "id": 1
        }
    ]

But I want my JSON format to be like this:-

{
    id: 1,
    molecule: 'Heparin',
    form: 'Ointments',
    strength: '50IU',
    sub_category: 'CARDIO VASCULAR SYSTEM',
    brand_name_1: 'HEPTRAL(Abbott)',
    brand_name_2: 'HYSAM(Alkem)',
    brand_name_3: 'THROMBOMARK(Mankind)',
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十雾 2025-02-13 20:14:50

您可以在聚合管道中添加$投影步骤。类似:

db.collection.aggregate([
  {
    $project: {
      brand_name_1: {
        $concat: [
          {$arrayElemAt: ["$brand1.brand_name", 0]}, "(",
          {$arrayElemAt: ["$brand1.manufacturer_name", 0]}, ")"
        ]
      },
      brand_name_2: {
        $concat: [
          {$arrayElemAt: ["$brand1.brand_name", 1]}, "(",
          {$arrayElemAt: ["$brand1.manufacturer_name", 1]}, ")"
        ]
      },
      brand_name_3: {
        $concat: [
          {$arrayElemAt: ["$brand1.brand_name", 2]}, "(",
          {$arrayElemAt: ["$brand1.manufacturer_name", 2]}, ")"
        ]
      },
      sub_category: "$subcategory_name",
      strength: "$dose_size",
      form: "$form_name",
      molecule: "$generic_name",
      id: 1,
      _id: 0
    }
  }
])

You can add a $projection step to your aggregation pipeline. Something like:

db.collection.aggregate([
  {
    $project: {
      brand_name_1: {
        $concat: [
          {$arrayElemAt: ["$brand1.brand_name", 0]}, "(",
          {$arrayElemAt: ["$brand1.manufacturer_name", 0]}, ")"
        ]
      },
      brand_name_2: {
        $concat: [
          {$arrayElemAt: ["$brand1.brand_name", 1]}, "(",
          {$arrayElemAt: ["$brand1.manufacturer_name", 1]}, ")"
        ]
      },
      brand_name_3: {
        $concat: [
          {$arrayElemAt: ["$brand1.brand_name", 2]}, "(",
          {$arrayElemAt: ["$brand1.manufacturer_name", 2]}, ")"
        ]
      },
      sub_category: "$subcategory_name",
      strength: "$dose_size",
      form: "$form_name",
      molecule: "$generic_name",
      id: 1,
      _id: 0
    }
  }
])

See how it works on the playground example

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文