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.
23 Answers
Try this:
// mongo shell
objectId.str
// mongo client, JS, Node.js
objectId.toString()
See the doc.
ObjectId()
has the following attribute and methods:
str
- Returns the hexadecimal string representation of the object.
.toString()
added from comment of @J.C.
-
i dont understand why, this isnt working for me when i do a console.log, i see the objectId as an object on the console– rozCommented Mar 18, 2017 at 7:06
-
22This didn't work for me either. However,
objectId.toString()
did.– J.C.Commented May 5, 2017 at 15:48 -
1
objectId.str
is for mongo shell,objectId.toString()
is for mongo client Commented Oct 15, 2021 at 3:38 -
What is the solution for monk? Neither .str or .toString() are working I am just getting an object, where the display is the exact string I am after but doesn't match equality checks against another string– jacktimCommented Dec 10, 2022 at 2:40
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.
-
1.toHexString() worked for me thanks Sammaye! mongodb.github.io/node-mongodb-native/api-bson-generated/… Commented Dec 29, 2014 at 3:16
-
As of 2022 there's no .str - the only viable way to convert an ObjectId to String is through .toString() Commented Nov 29, 2022 at 23:32
in the shell
ObjectId("507f191e810c19729de860ea").str
in js using the native driver for node
objectId.toHexString()
-
3Nice answer, which points out the difference using native driver. Commented Nov 22, 2017 at 9:52
-
1This is the case if you're using a client like NoSQLBooster. Thanks. Commented Feb 7, 2022 at 18:44
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" }
}}
])
Use toString:
var stringId = objectId.toString()
Works with the latest Node MongoDB Native driver (v3.0+):
Acturally, you can try this:
> a['_id']
ObjectId("518cbb1389da79d3a25453f9")
> a['_id'] + ''
"518cbb1389da79d3a25453f9"
ObjectId object + String will convert to String object.
If someone use in Meteorjs, can try:
In server: ObjectId(507f191e810c19729de860ea)._str
.
In template: {{ collectionItem._id._str }}
.
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()
.
this works, You have mongodb object: ObjectId(507f191e810c19729de860ea)
,
to get string value of _id
, you just say
ObjectId(507f191e810c19729de860ea).valueOf();
-
-
the string is wrapped inside ObjectId, so to get the wrapped value you use the answer i just provided @ Ivan Barayev– ndotieCommented Aug 10, 2016 at 20:53
In Js do simply: _id.toString()
For example:
const myMongoDbObjId = ObjectID('someId');
const strId = myMongoDbObjId.toString();
console.log(typeof strId); // string
-
2
-
-
1
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);
}
Just use this : _id.$oid
And you get the ObjectId string. This come with the object.
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)
})
-
Hello Hogan jerry, and welcome to StackOverflow! Please use code formatting only for the code parts, it will be easier to read :) Have a good day!– ZoetteCommented May 14, 2019 at 23:32
-
1
On aggregation use $addFields
$addFields: {
convertedZipCode: { $toString: "$zipcode" }
}
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.
In Mongoose, you can use toString() method on ObjectId to get a 24-character hexadecimal string.
Below three methods can be used to get the string version of id.
(Here newUser is an object containing the data to be stored in the mongodb document)
newUser.save((err, result) => {
if (err) console.log(err)
else {
console.log(result._id.toString()) //Output - 23f89k46546546453bf91
console.log(String(result._id)) //Output - 23f89k46546546453bf91
console.log(result._id+"") //Output - 23f89k46546546453bf91
}
});
user: {
_id: ObjectId('234578fbf161fefa4b4efc')
userId: ObjectId('234578fbf161fefa4b4efc')
}
console.log(user._id) // new ObjectId('234578fbf161fefa4b4efc')
console.log(user.id) // 234578fbf161fefa4b4efc
console.log(user.userId) // new ObjectId('234578fbf161fefa4b4efc')
console.log(String(user.userId)) // 234578fbf161fefa4b4efc
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);
});
}
...
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.
""+objectId
orobjectId.toString()
wherebyobjectId
is the variable I believe will do what your looking for.