Convert ObjectID (Mongodb) to String in JavaScript

JavascriptMongodbAggregation Framework

Javascript 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+):

http://mongodb.github.io/node-mongodb-native/3.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.

Mongoose documentation

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvhlenView Question on Stackoverflow
Solution 1 - JavascriptanubiskongView Answer on Stackoverflow
Solution 2 - JavascriptSammayeView Answer on Stackoverflow
Solution 3 - JavascriptKarl PokusView Answer on Stackoverflow
Solution 4 - JavascriptAshhView Answer on Stackoverflow
Solution 5 - JavascriptVidarView Answer on Stackoverflow
Solution 6 - Javascriptuser1438797View Answer on Stackoverflow
Solution 7 - JavascriptJonatas EduardoView Answer on Stackoverflow
Solution 8 - JavascriptWilliam MyersView Answer on Stackoverflow
Solution 9 - JavascriptndotieView Answer on Stackoverflow
Solution 10 - JavascriptPraveen RLView Answer on Stackoverflow
Solution 11 - JavascriptMarView Answer on Stackoverflow
Solution 12 - Javascriptmustafa kemal tunaView Answer on Stackoverflow
Solution 13 - JavascriptSergioView Answer on Stackoverflow
Solution 14 - JavascriptHogan jerryView Answer on Stackoverflow
Solution 15 - JavascriptqabilView Answer on Stackoverflow
Solution 16 - JavascriptUriel Acosta HernándezView Answer on Stackoverflow
Solution 17 - JavascriptStasVoView Answer on Stackoverflow
Solution 18 - JavascriptdeZakView Answer on Stackoverflow
Solution 19 - JavascriptMuhammad ShahzadView Answer on Stackoverflow
Solution 20 - JavascriptAnthony AwuleyView Answer on Stackoverflow
Solution 21 - JavascriptBluemontView Answer on Stackoverflow