18
votes

i have string with ObjectId .

var comments = new Schema({
    user_id:  { type: Schema.Types.ObjectId, ref: 'users',required: [true,'No user id found']},
    post: { type: Schema.Types.ObjectId, ref: 'posts',required: [true,'No post id found']}....

export let commentsModel: mongoose.Model<any> = mongoose.model("comments", comments);

How i user it:

let comment = new commentsModel;
str = 'Here my ObjectId code' //
comment.user_id = str;
comment.post = str;
comment.save();

When I create a "comment" model and assign a string user_id value or post I have an error when saving. I make console.log(comment) all data is assigned to vars.

I try:

 var str = '578df3efb618f5141202a196';
    mongoose.mongo.BSONPure.ObjectID.fromHexString(str);//1
    mongoose.mongo.Schema.ObjectId(str);//2
    mongoose.Types.ObjectId(str);//3
  1. TypeError: Object function ObjectID(id) {
  2. TypeError: Cannot call method 'ObjectId' of undefined
  3. TypeError: Cannot read property 'ObjectId' of undefined

And of course I included the mongoose BEFORE ALL CALLS

import * as mongoose from 'mongoose';

nothing works.

2
No methods from that question helps (Melixion
Then start showing some code / error messages which should be included in your question right from the start. We cannot help you when you don't show what fails (your code) and how it fails (the error)DAXaholic
I show code and sample of stringMelixion

2 Answers

32
votes

You want to use the default export:

import mongoose from 'mongoose';

After that, mongoose.Types.ObjectId will work:

import mongoose from 'mongoose';
console.log( mongoose.Types.ObjectId('578df3efb618f5141202a196') );

EDIT: full example (tested with [email protected]):

import mongoose from 'mongoose';

mongoose.connect('mongodb://localhost/test');

const Schema = mongoose.Schema;

var comments = new Schema({
    user_id:  { type: Schema.Types.ObjectId, ref: 'users',required: [true,'No user id found']},
    post: { type: Schema.Types.ObjectId, ref: 'posts',required: [true,'No post id found']}
});

const commentsModel = mongoose.model("comments", comments);

let comment = new commentsModel;
let str = '578df3efb618f5141202a196';
comment.user_id = str;
comment.post = str;
comment.save().then(() => console.log('saved'))
              .catch(e => console.log('Error', e));

Database shows this:

mb:test$ db.comments.find().pretty()
{
    "_id" : ObjectId("578e5cbd5b080fbfb7bed3d0"),
    "post" : ObjectId("578df3efb618f5141202a196"),
    "user_id" : ObjectId("578df3efb618f5141202a196"),
    "__v" : 0
}
5
votes

use this

 var mongoose = require('mongoose');
 var str = '578df3efb618f5141202a196';
 var mongoObjectId = mongoose.Types.ObjectId(str);