Convert ObjectID (Mongodb) to String in JavaScript
JavascriptMongodbAggregation FrameworkJavascript Problem Overview
I want to convert ObjectID (Mongodb) to String in JavaScript. When I get a Object form MongoDB. it like as a object has: timestamp, second, inc, machine. I can't convert to string.
Javascript Solutions
Solution 1 - Javascript
Try this:
objectId.str
See the doc.
> ObjectId()
has the following attribute and methods:
>
> [...]
>
> * str
- Returns the hexadecimal string representation of the object.
Solution 2 - Javascript
Here is a working example of converting the ObjectId
in to a string
> a=db.dfgfdgdfg.findOne()
{ "_id" : ObjectId("518cbb1389da79d3a25453f9"), "d" : 1 }
> a['_id']
ObjectId("518cbb1389da79d3a25453f9")
> a['_id'].toString // This line shows you what the prototype does
function () {
return "ObjectId(" + tojson(this.str) + ")";
}
> a['_id'].str // Access the property directly
518cbb1389da79d3a25453f9
> a['_id'].toString()
ObjectId("518cbb1389da79d3a25453f9") // Shows the object syntax in string form
> ""+a['_id']
518cbb1389da79d3a25453f9 // Gives the hex string
Did try various other functions like toHexString()
with no success.
Solution 3 - Javascript
in the shell
ObjectId("507f191e810c19729de860ea").str
in js using the native driver for node
objectId.toHexString()
Solution 4 - Javascript
You can use $toString
aggregation introduced in mongodb version 4.0 which converts the ObjectId to string
db.collection.aggregate([
{ "$project": {
"_id": { "$toString": "$your_objectId_field" }
}}
])
Solution 5 - Javascript
Use toString:
var stringId = objectId.toString()
Works with the latest Node MongoDB Native driver (v3.0+):
Solution 6 - Javascript
Acturally, you can try this:
> a['_id']
ObjectId("518cbb1389da79d3a25453f9")
> a['_id'] + ''
"518cbb1389da79d3a25453f9"
ObjectId object + String will convert to String object.
Solution 7 - Javascript
If someone use in Meteorjs, can try:
In server: ObjectId(507f191e810c19729de860ea)._str
.
In template: {{ collectionItem._id._str }}
.
Solution 8 - Javascript
Assuming the OP wants to get the hexadecimal string value of the ObjectId, using Mongo 2.2 or above, the valueOf()
method returns the representation of the object as a hexadecimal string. This is also achieved with the str
property.
The link on anubiskong's post gives all the details, the danger here is to use a technique which has changed from older versions e.g. toString()
.
Solution 9 - Javascript
this works, You have mongodb object: ObjectId(507f191e810c19729de860ea)
,
to get string value of _id
, you just say
ObjectId(507f191e810c19729de860ea).valueOf();
Solution 10 - Javascript
In Javascript, String() make it easy
const id = String(ObjectID)
Solution 11 - Javascript
In Js do simply: _id.toString()
For example:
const myMongoDbObjId = ObjectID('someId');
const strId = myMongoDbObjId.toString();
console.log(typeof strId); // string
Solution 12 - Javascript
toString()
method gives you hex String which is kind of ascii code but in base 16 number system.
> Converts the id into a 24 character hex string for printing
For example in this system:
"a" -> 61
"b" -> 62
"c" -> 63
So if you pass "abc..."
to get objectId
you will get "616263...".
As a result if you want to get readable string(char string) from objectId
you have to convert it(hexCode to char).
To do this I wrote an utility function hexStringToCharString()
function hexStringToCharString(hexString) {
const hexCodeArray = [];
for (let i = 0; i < hexString.length - 1; i += 2) {
hexCodeArray.push(hexString.slice(i, i + 2));
}
const decimalCodeArray = hexCodeArray.map((hex) => parseInt(hex, 16));
return String.fromCharCode(...decimalCodeArray);
}
and there is usage of the function
import { ObjectId } from "mongodb";
const myId = "user-0000001"; // must contains 12 character for "mongodb": 4.3.0
const myObjectId = new ObjectId(myId); // create ObjectId from string
console.log(myObjectId.toString()); // hex string >> 757365722d30303030303031
console.log(myObjectId.toHexString()); // hex string >> 757365722d30303030303031
const convertedFromToHexString = hexStringToCharString(
myObjectId.toHexString(),
);
const convertedFromToString = hexStringToCharString(myObjectId.toString());
console.log(`convertedFromToHexString:`, convertedFromToHexString);
//convertedFromToHexString: user-0000001
console.log(`convertedFromToString:`, convertedFromToString);
//convertedFromToHexString: user-0000001
And there is also TypeScript version of hexStringToCharString() function
function hexStringToCharString(hexString: string): string {
const hexCodeArray: string[] = [];
for (let i = 0; i < hexString.length - 1; i += 2) {
hexCodeArray.push(hexString.slice(i, i + 2));
}
const decimalCodeArray: number[] = hexCodeArray.map((hex) =>
parseInt(hex, 16),
);
return String.fromCharCode(...decimalCodeArray);
}
Solution 13 - Javascript
Just use this : _id.$oid
And you get the ObjectId string. This come with the object.
Solution 14 - Javascript
Found this really funny but it worked for me:
db.my_collection.find({}).forEach((elm)=>{
let value = new String(elm.USERid);//gets the string version of the ObjectId which in turn changes the datatype to a string.
let result = value.split("(")[1].split(")")[0].replace(/^"(.*)"$/, '$1');//this removes the objectid completely and the quote
delete elm["USERid"]
elm.USERid = result
db.my_collection.save(elm)
})
Solution 15 - Javascript
You can use string formatting.
const stringId = `${objectId}`;
Solution 16 - Javascript
On aggregation use $addFields
$addFields: {
convertedZipCode: { $toString: "$zipcode" }
}
Solution 17 - Javascript
Documentation of v4 (right now it's latest version) MongoDB NodeJS Driver says: Method toHexString() of ObjectId returns the ObjectId id as a 24 character hex string representation.
Solution 18 - Javascript
In Mongoose, you can use toString() method on ObjectId to get a 24-character hexadecimal string.
Solution 19 - Javascript
Use this simple trick, your-object.$id
I am getting an array of mongo Ids, here is what I did.
jquery:
...
success: function (res) {
console.log('without json res',res);
//without json res {"success":true,"message":" Record updated.","content":[{"$id":"58f47254b06b24004338ffba"},{"$id":"58f47254b06b24004338ffbb"}],"dbResponse":"ok"}
var obj = $.parseJSON(res);
if(obj.content !==null){
$.each(obj.content, function(i,v){
console.log('Id==>', v.$id);
});
}
...
Solution 20 - Javascript
You could use String
String(a['_id'])
Solution 21 - Javascript
If you're using Mongoose along with MongoDB, it has a built-in method for getting the string value of the ObjectID. I used it successfully to do an if
statement that used ===
to compare strings.
From the documentation: > Mongoose assigns each of your schemas an id virtual getter by default which returns the document's _id field cast to a string, or in the case of ObjectIds, its hexString. If you don't want an id getter added to your schema, you may disable it by passing this option at schema construction time.