skip to Main Content

Below is the JSON file and I am trying to change the key name in offers from ‘_id’ to ‘id’

[{
        
        "offers": [{
            "i": "",
            "a": 
            "e": 25.3,
            "c": "A new concept in the ed-tech market. I can relate with the importance of the Learn By Doing philosophy. Keep up the Good Work! Definitely interested to work with you to scale the vision of the company!",
            "_id": "62565340aa2519d6cc33e791"
        }],
        "id": "62565340aa2519d6cc33e790"
    },
    {
        "er": "#3",
        "p": "Title #3",
        "p": "Idea #3",
        "at": ,
        "equity": 25.3,
        "offers": [],
        "id": "6256533baa2519d6cc33e78f"
    }
]

I am new to Node js
I am able to change the ‘id’ key outside of every pitch but not inside ‘offers’ key.
Can someone please help me in this.

3

Answers


  1. Try to change your code like this:

    MongoClient.connect(url, function (err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      var coll = dbo.collection("pitches");
    
      coll
        .find({})
        .sort({
          _id: -1,
        })
        .toArray(function (err, result) {
          if (err) {
            response.send(err);
          } else {
            for (const value of res) {
                for (const offer of value.offers) {
                  offer.id = offer._id
                  delete offer._id
                }
            }
    
            response.statusCode = 201;
            response.send(result);
          }
        });
    });
    
    Login or Signup to reply.
  2. Your answer is almost right. Use double for loop.

    let result = [
        {
            "entrepreneur": "Yakshit#4",
            "pitchTitle": "Sample Title #4",
            "pitchIdea": "Sample Idea #4",
            "askAmount": 1000000000,
            "equity": 25.3,
            "offers": [{
                "investor": "Anupam Mittal",
                "amount": 1000000000,
                "equity": 25.3,
                "comment": "A new concept in the ed-tech market. I can relate with the importance of the Learn By Doing philosophy. Keep up the Good Work! Definitely interested to work with you to scale the vision of the company!",
                "_id": "62565340aa2519d6cc33e791"
            }],
            "_id": "62565340aa2519d6cc33e790"
        },
        {
            "entrepreneur": "Yakshit#3",
            "pitchTitle": "Sample Title #3",
            "pitchIdea": "Sample Idea #3",
            "askAmount": 1000000000,
            "equity": 25.3,
            "offers": [],
            "_id": "6256533baa2519d6cc33e78f"
        }
    ]
    for (const val of result) {
        val["id"] = val["_id"];
        delete val["_id"];
        for (const val2 of val["offers"]) {
            val2["id"] = val2["_id"];
            delete val2["_id"];
        }
    }
    console.log(JSON.stringify(result));

    do it in mongo query

    db.collection.aggregate([
      {
        $match: {}
      },
      {
        $set: {
          id: "$_id",
          offers: {
            $map: {
              input: "$offers",
              as: "o",
              in: { $mergeObjects: [ "$$o", { id: "$$o._id" } ] }
            }
          }
        }
      },
      {
        $unset: [ "_id", "offers._id" ]
      }
    ])
    

    mongoplayground

    Login or Signup to reply.
  3. OPTION 1
    as explained here You can change key name while returning query result from mongodb using aggregation.
    orginal data:

    { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
    { "_id" : 3, "name" : "Fritz", "salary" : 25000 }
    { "_id" : 4, "name" : "Chris", "salary" : 45000 }
    { "_id" : 5, "name" : "Beck", "salary" : 82000 }
    

    query:

    db.employees.aggregate([
      { "$project": { "employee": "$name", "salary": 1 }}
    ])
    

    query result:

    { "_id" : 2, "salary" : 128000, "employee" : "Sarah" }
    { "_id" : 3, "salary" : 25000, "employee" : "Fritz" }
    { "_id" : 4, "salary" : 45000, "employee" : "Chris" }
    { "_id" : 5, "salary" : 82000, "employee" : "Beck" }
    

    OPTION 2
    you can use lodash and _.transform as explained here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search