DrinkandDerive
DrinkandDerive

Reputation: 170

Proper way to convert Data type of a field in MongoDB

Possible Replication of How to change the type of a field?

I am currently newly learning MongoDB and I am facing problem while converting Data type of field value to another data type.

Below is an example of my document

[
{
   
    "Name of Restaurant": "Briyani Center",
    "Address": " 336 & 338, Main Road",
    "Location": "XYZQWE",
    "PriceFor2": "500.0",
    "Dining Rating": "4.3",
    "Dining Rating Count": "1500",
},
{
    "Name of Restaurant": "Veggie Conner",
    "Address": " New 14, Old 11/3Q, Railway Station Road",
    "Location": "ABCDEF",
    "PriceFor2": "1000.0",
    "Dining Rating": "4.4",
    
}]

Like above I have 12k documents. Notice the datatype of PriceFor2 is a string. I would like to convert the data type to Integer data type.

I have referred many amazing answers given in the above link. But when I try to run the query, I get .save() is not a function error. Please advice what is the problem.

Below is the code I used

db.chennaiData.find().forEach( function(x){ x.priceFor2= new NumberInt(x.priceFor2);
db.chennaiData.save(x);
db.chennaiData.save(x);});

This is the error I am getting..

TypeError: db.chennaiData.save is not a function

Upvotes: 0

Views: 236

Answers (1)

ray
ray

Reputation: 15287

From MongoDB's save documentation:

Starting in MongoDB 4.2, the db.collection.save() method is deprecated. Use db.collection.insertOne() or db.collection.replaceOne() instead.

Likely you are having a MongoDB with version 4.2+, so the save function is no longer available. Consider migrate to the usage of insertOne and replaceOne as suggested.


For your specific scenario, it is actually preferred to do with a single update as mentioned in another SO answer. It only does one db call(while your approach fetches all documents in the collection to the application level) and performs n db call to save them back.

db.collection.update({},
[
  {
    $set: {
      PriceFor2: {
        $toDouble: "$PriceFor2"
      }
    }
  }
],
{
  multi: true
})

Mongo Playground

Upvotes: 1

Related Questions