I have a collection that has some fields that should be integers. Due to a software bug, some of these values are strings. I need to convert them. Here is an example document:
var coll = db.getCollection('info');
coll.find({ id: "985517" });
Result:
{
"_id" : "41cbb4e48284c0612a1c4b3ee5e3e2720c01197a",
"id" : "985517",
"title" : "009_1a.jpg",
"ext" : ".jpg",
"content_type" : "image/jpeg; charset=utf-8",
"sha1" : "41cbb4e48284c0612a1c4b3ee5e3e2720c01197a",
"has_thumb" : true,
"size" : 2917,
"width_px" : "70",
"height_px" : "69"
}
I try to convert width_px and height_px values into integers. My first naive try:
var coll = db.getCollection('info');
var bulk = coll.initializeOrderedBulkOp();
var counter = 0;
coll.find({ width_px: { $type: "string" }, id: "985516" }).limit(100).forEach(function(data) {
var updoc = {
"$set": {}
};
updoc["$set"]["width_px"] = parseInt(data.width_px);
// queue the update
bulk.find({
"_id": data._id
}).update(updoc);
counter++;
// Drain and re-initialize every 1000 update statements
if (counter % 1000 == 0) {
bulk.execute();
bulk = coll.initializeOrderedBulkOp();
}
})
// Add the rest in the queue
if (counter % 1000 != 0) bulk.execute();
The result is dissapointing:
{
"_id" : "41cbb4e48284c0612a1c4b3ee5e3e2720c01197a",
"id" : "985517",
"title" : "009_1a.jpg",
"ext" : ".jpg",
"content_type" : "image/jpeg; charset=utf-8",
"sha1" : "41cbb4e48284c0612a1c4b3ee5e3e2720c01197a",
"has_thumb" : true,
"size" : 2917,
"width_px" : 70.0,
"height_px" : "69"
}
So it was updated to double, instead of int32. I understand that in JavaScript, there is no separate double and integer type, just "number". But I need to update 100 000 documents and I want to do this efficiently.
But how?
Best Answer
As per MongoDB documentation here From the
Documents tab
inMongoDB Compass
, you can view, insert, clone, modify, and delete documents .First you have to connect your mongod with
MongoDB Compass
then you shall able to change your desire data type of their respective field in MongoDB.Change Field Type
You can change the data type of a field by using the data type selectors on the right of the field.
For your further ref here