Is there a function to turn a string into an objectId in node using mongoose? The schema specifies that something is an ObjectId, but when it is saved from a string, mongo tells me it is still just a string. The _id of the object, for instance, is displayed as objectId("blah").
12 Answers
You can do it like so:
var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
For new versions:
var id = new mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
16 Comments
import mongoose from 'mongoose'; doesn't seem to work. Argument of type 'import("mongoose").Types.ObjectId' is not assignable to parameter of type 'import("mongoose").Schema.Types.ObjectId'.. Anybody else gettting this?For new versions, adding 'new' keyword to the selected answer worked, like this
var mongoose = require("mongoose");
var _id = new mongoose.Types.ObjectId("64b0ee2c189286a5abc6b4ba");
1 Comment
import { Types } from 'mongoose'; const id = "123"; const result = Types.ObjectId.createFromHexString(id);You can do it like this:
var mongoose = require('mongoose');
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001");
EDIT: New standard has fromHexString rather than fromString
4 Comments
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");
1 Comment
mongoose.Types.ObjectId and mongoose.mongo.ObjectId? The object properties of mongoose are different, but they may be referencing the same method underneath. Please comment on the underlying methods on Types vs mongo.I couldn't resolve this method (admittedly I didn't search for long)
mongoose.mongo.BSONPure.ObjectID.fromHexString
If your schema expects the property to be of type ObjectId, the conversion is implicit, at least this seems to be the case in 4.7.8.
You could use something like this however, which gives a bit more flex:
function toObjectId(ids) {
if (ids.constructor === Array) {
return ids.map(mongoose.Types.ObjectId);
}
return mongoose.Types.ObjectId(ids);
}
Comments
Just see the below code snippet if you are implementing a REST API through express and mongoose. (Example for ADD)
....
exports.AddSomething = (req,res,next) =>{
const newSomething = new SomeEntity({
_id:new mongoose.Types.ObjectId(), //its very own ID
somethingName:req.body.somethingName,
theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// if you want to pass an object ID
})
}
...
Hope it Helps
Comments
I am providing a chunk of code which is working. I am using mongoose( version ^7.4.0), typescript and node.js( version 16.16.0). I use Object
const sSchema = new Schema({ "Cell Phone": String, "Work Phone": String });
const servicesModel = mongoose.model('Services', sSchema);
const objectId = Object("63aed3cc10149ed38f1a24c0");
servicesModel.find({ "_id" : objectId}).then(async (locationService) => {
console.log(locationService);
});